2013-03-27 81 views
1

是否有性能以下两个查询的区别?MySQL“AS”而不是“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

+1

不,同样的事情。 – Bridge 2013-03-27 08:54:12

+0

我认为quey没有性能差异,但是第一个查询是更好的方法 – Shin 2013-03-27 08:54:17

+0

http://stackoverflow.com/questions/8363108/how-does-table-alias-names-affect-performance的潜在副本 – 2013-03-27 08:55:40

回答

2

与一切:来衡量是要知道。如果你真的想知道运行一个分析器和度量。否则就把它从我们身上拿走吧:到目前为止,你还没有把这个想法付诸实践。

如果有一个在所有应该一)被认为是在MySQL中的一个漏洞(相当数量)有什么区别,B)是解析一部分,而不是查询执行部分查询过程中出现问题,因此是可以忽略不计无论如何,因为无论如何(如果不是更多),执行而不是解析通常占总“查询时间”的99.99999%。

如果有任何可测量的差异,它应该是非常,非常,非常小,因此A)不值得理会的差别,因为用户通常不会在纳秒为单位通知的加速和b)只有当你在紧密循环中运行许多,数千个查询时才会显示。

如果MySQL的贡献者没有搞砸,那么根本就没什么区别,因为AS关键字只是可选的并且易于理解。 知道肯定的唯一方法是配置文件。这不会是第一次在软件中出现一些奇怪的错误或行为。但是,假设AS关键字根本没有什么区别,因为很久以前,数以百万计的MySQL用户(或者他们之前都没有发现过)已经“发现”困扰,你永远不知道Puh)。花费任何时间分析这个“问题”,恕我直言,是浪费时间。

阅读rules of Optimization club

只有当实际上性能问题,你开始寻找优化的地方。而且你只会优化“低挂果实”或占据相当大负载的东西(无论是I/O,CPU,网络等等)。优化删除AS关键字以提高性能的查询是一种微型优化,永远不会回报您的时间投入(禁止错误/问题)。作为一个“思想实验”,尽管你的问题可以(也应该)通过建立使用分析,而不是猜测的硬数据,别人的意见等回答


没有离开了东西一样querycaches是可能每次执行查询时可能会遇到在有/无AS关键字或AS关键字或AS关键字的情况下执行查询的情况,这会导致查询执行计划(不必要地)重新创建或查询缓存无法无法执行被重用等等,但现在我们真的在这里说边缘案例,为了这个说法,再说一遍:来衡量是知道

1

的实际上是一样的。

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