WHERE后面的条件顺序影响SQL的执行效率

WHERE子句后面的条件顺序对大数据量表的查询会产生直接的影响,如
Select * from zl_yhjbqk where dy_dj = '1K以下' and xh_bz=1
Select * from zl_yhjbqk where xh_bz=1 and dy_dj = '1K以下'
以上两个SQL中dy_dj及xh_bz两个字段都没进行索引,所以执行的时候都是全表扫描,第一条SQL的dy_dj = '1KV以下'条件在记录集内比率为99%,而xh_bz=1的比率只为0.5%,在进行第一条SQL的时候99%条记录都进行dy_dj及xh_bz的比较,而在进行第二条SQL的时候0.5%条记录都进行dy_dj及xh_bz的比较,以此可以得出第二条SQL的CPU占用率明显比第一条低。

可以解释下上面说第一条SQL是99%的记录比较,第二条SQL是0.5%的记录比较?谢谢!
谢谢吴熹老师,那请问上面说的99%与0.5%这些关系说起来就没有道理了?

吴老师和夏桀同学的哪个对呢?有点疑惑了。。。

问题补充:谢谢吴熹老师,那请问上面说的99%与0.5%这些关系说起来就没有道理了?
-------------------------
对,
语句经过数据库引擎优化后产生的执行计划应该是相同的

WHERE子句后面的条件顺序对大数据量表的查询会产生直接的影响
---------------
where顺序不会影响执行结果,楼主可以查询执行计划。应该是一样的。

相同语句连续执行两次,效率不同。这是由于缓冲区影响。
测试性能最好是执行语句1时,清空执行计划和缓冲区(SQL Server用 DBCC FREEPROCCACHE/DBCC DROPCLEANBUFFERS )。最好就是重启实例

SQL强制执行顺序
option(FORCE ORDER)--用法和说明可参照MSDN联机
温馨提示:答案为网友推荐,仅供参考
第1个回答  2010-07-25
你测试过么?
你看过执行计划么?

我相信这2个语句是等价的 。。优化器会自动优化

你自己可以按CTRL+L 看2者执行计划
第2个回答  2010-07-27
where 后面条件是and关系,那么在比较第一个条件为假则不比较第二个条件
第一条语句and前条件为真的多,那么比较次数显然要多本回答被提问者采纳
第3个回答  2010-07-27
where 后面条件是and关系,那么在比较第一个条件为假则不比较第二个条件
第一条语句and前条件为真的多,那么比较次数显然要多

支持他的答案

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网