以下两个查询之间是否存在效果差异?
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
)
答案 0 :(得分:2)
与所有内容一样:衡量是知道。如果你真的想知道运行一个分析器和测量。否则从我们这里拿走它:到目前为止你甚至不值得考虑它。
如果,根本不存在任何差异(相当大的数量)应该a)被认为是MySQL中的缺陷,b)在查询解析部分时出现问题,不是查询执行部分,因此无论如何都是可忽略的,因为执行而不是解析通常会占总“查询时间”的99.99999%(如果不是更多)。
如果有任何可衡量的差异,将应该非常非常小,因此a)不值得为这些差异而烦恼,因为用户通常不会注意加速度以纳秒为增量,b)只有在紧密循环中运行数千个查询时才会显着。
如果MySQL的贡献者没有搞砸,那么就没有任何区别,因为AS
关键字只是可选的,并且存在易读性。 确定的唯一方法是分析。这不会是第一次在软件中弹出一些奇怪的错误或行为。但是(假设AS
关键字根本不会产生任何影响是非常安全的,因为很久以前,许多数以千计的MySQL用户都已经“发现”了这一点(或者他们都没有打扰过,你永远不会知道)。花在任何时候描述这个“问题”,恕我直言,是浪费时间。
只有当 出现性能问题时,才会开始寻找要优化的地方。而你只是优化“低挂水果”或占用相当大负荷的东西(无论是I / O,CPU,网络等)。优化查询删除AS
关键字以提高性能是一种微观优化,永远不会回报您的时间投资(除了错误/问题)。作为一个“思想实验”,虽然你的问题可以(并且应该)通过使用分析而不是猜测,其他人的意见等建立硬数据来回答。
我确实遗漏了可能可能遭受查询执行的查询缓存等问题,这些问题是使用/不使用AS
关键字或AS
关键字执行的每次执行查询时都会放置(或者更确切地说:可能)导致查询执行计划(不必要地)重新创建或查询缓存无法重复使用等等。但现在我们真的在这里讨论边缘情况这句话再说一遍:衡量就是知道。
答案 1 :(得分:1)
真的是一样的。
AS
关键字是可选的。就像OUTER
和LEFT JOIN
上的LEFT OUTER JOIN
关键字一样。
答案 2 :(得分:0)
当使用标识符别名化select_expr时,AS关键字是可选。 但是,因为AS是可选的。 MySQL将第二个解释为别名。 因此,最好在指定列别名时习惯使用AS。
by:http://dev.mysql.com/doc/refman/5.0/en/select.html#idp56626352