MySQL的性能;作为「;而不是",;作为「;

MySQL的性能;作为「;而不是",;作为「;,mysql,performance,Mysql,Performance,以下两个查询之间是否存在性能差异 SELECT * FROM users AS u LEFT JOIN parents AS p ON u.id=p.user_id 及 (第二个没有,因为)它们实际上是一样的 AS关键字是可选的。就像LEFT JOIN上的OUTER关键字和LEFT OUTER JOIN当使用标识符为select expr添加别名时,AS关键字是可选的。 但是,因为AS是可选的。MySQL将第二个解释为别名。 因此,在指定列别名时,最好养成显式使用AS的习惯 作者:与一切事物一

以下两个查询之间是否存在性能差异

SELECT * FROM users AS u LEFT JOIN parents AS p ON u.id=p.user_id


(第二个没有
,因为

它们实际上是一样的


AS
关键字是可选的。就像
LEFT JOIN
上的
OUTER
关键字和
LEFT OUTER JOIN

当使用标识符为select expr添加别名时,AS关键字是可选的。 但是,因为AS是可选的。MySQL将第二个解释为别名。 因此,在指定列别名时,最好养成显式使用AS的习惯

作者:

与一切事物一样:衡量就是了解。如果您真的想知道,请运行探查器并进行测量。否则就从我们这里拿走吧:到目前为止,你的想法根本不值得

如果有任何差异(相当大),那么a)应被视为MySQL中的缺陷,b)在查询解析部分(而不是查询执行部分)出现问题,因此无论如何都是可以忽略的,因为执行而不是解析通常占总“查询时间”的99.99999%(如果不是更多的话)

如果存在任何可测量的差异,那么差异应该非常非常小,因此a)不值得为差异而烦恼,因为用户通常不会注意到以纳秒为增量的加速,b)只有在紧密循环中运行成千上万个查询时才可以注意到

如果MySQL的贡献者没有搞砸,那就没有什么区别了,因为
AS
关键字只是可选的,存在是为了可读性。确切知道的唯一方法是分析。这不是第一次在软件中出现奇怪的bug或行为。但是(非常)安全的假设是,
作为
关键字没有任何区别,因为这在很久以前就已经被你之前的数百万MySQL用户“发现”了(或者他们中没有一个曾经打扰过你,你永远也不知道)。我认为,花任何时间分析这个“问题”都是浪费时间

读这本书

只有当存在性能问题时,您才开始寻找优化的地方。您只优化“低挂果实”或占相当大负载的东西(无论是I/O、CPU、网络等等)。优化查询将
作为
关键字删除以提高性能是一种微优化,它永远不会回报您的时间投资(除非出现错误/问题)。作为一个“思维实验”,你的问题可以(也应该)通过使用分析而不是猜测、其他人的意见等建立硬数据来回答



我确实忽略了像QueryCache这样的东西,它们可能会在每次执行查询时在不同的位置使用或不使用
AS
关键字或
AS
关键字执行查询,这可能(或者更确切地说:可能)导致查询执行计划(不必要地)失败被重新创建或查询缓存无法重用等。但现在我们在这里讨论的是边缘情况,因此俗话说:测量就是知道。

我认为quey没有性能差异,但第一个查询是为了更好地接近潜在的重复
SELECT * FROM users u LEFT JOIN parents p ON u.id=p.user_id