以下两个查询之间是否存在性能差异?
SELECT * FROM users AS u LEFT JOIN parents AS p ON u.id=p.user_id
和
SELECT * FROM users u LEFT JOIN parents p ON u.id=p.user_id
(第二个没有AS
)
以下两个查询之间是否存在性能差异?
SELECT * FROM users AS u LEFT JOIN parents AS p ON u.id=p.user_id
和
SELECT * FROM users u LEFT JOIN parents p ON u.id=p.user_id
(第二个没有AS
)
与一切一样:衡量就是知道。如果您真的想知道运行分析器并进行测量。否则请从我们这里拿走:到目前为止,您对此的想法甚至都不值得。
如果有任何差异(相当大)应该a)被认为是MySQL中的一个缺陷,b)是查询解析部分的问题,而不是查询执行部分,因此无论如何都可以忽略不计,因为执行而不是解析通常会无论如何占总“查询时间”的 99.99999%(如果不是更多的话)。
如果有任何可测量的差异,它应该非常、非常、非常小,因此 a) 不值得担心差异,因为用户通常不会注意到以纳秒为增量的加速,b) 只有在运行很多很多时才会注意到成千上万的查询在一个紧密的循环中。
如果 MySQL 的贡献者没有搞砸,那么根本没有区别,因为AS
关键字只是可选的并且存在是为了便于阅读。唯一确定的方法是分析。这不是第一次在软件中出现一些奇怪的错误或行为。但是可以(非常)安全地假设AS
关键字根本没有任何区别,因为很久以前,在您之前的数百万 MySQL 用户中的任何一个(或者他们都没有打扰过)很久以前就已经“发现”了,你永远不知道)。恕我直言,花任何时间分析这个“问题”都是浪费时间。
阅读优化俱乐部的规则。
只有当确实存在性能问题时,您才开始寻找优化的地方。而且您只优化“低悬的果实”或占相当大负载的东西(无论是 I/O、CPU、网络等)。优化查询删除AS
关键字以提高性能是一种微优化,永远不会回报您的时间投资(除非出现错误/问题)。作为“思想实验”,尽管您的问题可以(并且应该)通过使用分析而不是猜测、其他人的意见等建立硬数据来回答。
我确实遗漏了诸如查询缓存之类的东西,这些东西可能会在每次执行查询时使用/不使用AS
关键字或AS
关键字在不同位置执行查询,这将(或者更确切地说:可能)导致(不必要地)重新创建查询执行计划或查询缓存无法被重用等,但现在我们真的在这里谈论边缘情况,为此,再说一遍:测量就是知道。
真的是一样的。
AS
关键字是可选的。就像OUTER
关键字 onLEFT JOIN
和LEFT OUTER JOIN
。
当使用标识符为 select_expr 起别名时,AS 关键字是可选的。但是,因为 AS 是可选的。MySQL 将第二个解释为别名。因此,在指定列别名时,养成明确使用 AS 的习惯是一种很好的做法。
作者:http ://dev.mysql.com/doc/refman/5.0/en/select.html#idp56626352