当前位置:  开发笔记 > 后端 > 正文

哪个SQL语句更快?(HAVING vs. WHERE ......)

如何解决《哪个SQL语句更快?(HAVINGvs.WHERE)》经验,为你挑选了3个好方法。

理论(理论上我的意思是SQL标准)说WHERE在返回行之前限制结果集,HAVING在带来所有行之后限制结果集.所以WHERE更快.在这方面符合SQL标准的DBMS,只使用HAVING,你不能把条件放在WHERE上(比如某些RDBMS中的计算列).

你可以看到两者的执行计划并自行检查,没有什么能比这更好(用您的数据测量特定环境中的特定查询.)



1> Vinko Vrsalo..:

理论(理论上我的意思是SQL标准)说WHERE在返回行之前限制结果集,HAVING在带来所有行之后限制结果集.所以WHERE更快.在这方面符合SQL标准的DBMS,只使用HAVING,你不能把条件放在WHERE上(比如某些RDBMS中的计算列).

你可以看到两者的执行计划并自行检查,没有什么能比这更好(用您的数据测量特定环境中的特定查询.)



2> Eran Galperi..:

它可能取决于引擎.例如,MySQL在链中应用HAVING几乎是最后一个,这意味着几乎没有优化空间.从手册:

几乎在最后一次应用HAVING子句,就在将项目发送到客户端之前,没有优化.(在HAVING之后应用LIMIT.)

我相信这种行为在大多数SQL数据库引擎中是相同的,但我无法保证.


好吧,我只能谈论我所知道的并推测其余的:)

3> Mike Woodhou..:

这两个查询是等效的,您的DBMS查询优化器应该识别这个并生成相同的查询计划.它可能没有,但情况相当容易识别,所以我希望任何现代系统 - 甚至是Sybase - 来处理它.

应使用HAVING子句对组函数应用条件,否则可以将它们转换为WHERE条件.例如.如果你想将查询限制在COUNT(DZIALU)> 10的组,比如说,你需要将条件置于HAVING中,因为它作用于组,而不是单个行.

推荐阅读
落单鸟人
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有