SQL优化关于or与in使用

网上有不少人都在谈论or与in的使用,有的说两者没有什么区别,其实否则,估计是测试作的不够,其实or的效率为O(n),而in的效率为O(log2n),当基数越大时,in的效率就能凸显出来了。性能

有人作了这么一组实验(测试库数据为1000万条记录):A组分别用or与in查询3条记录,B组分别用or与in查询120条记录,C组分别用or与in查询500条记录,D组分别用or与in查询1000条记录.测试

第一种状况,目标列为主键的状况,4组测试执行计划同样,执行的时间也基本没有区别。
A组or和in的执行时间: or的执行时间为:0.002s     in的执行时间为:0.002s
B组or和in的执行时间: or的执行时间为:0.004s     in的执行时间为:0.004s
C组or和in的执行时间: or的执行时间为:0.006s     in的执行时间为:0.005s
D组or和in的执行时间: or的执行时间为:0.017s     in的执行时间为:0.014s索引

第二种状况,目标列为通常索引的状况,4组测试执行计划同样,执行的时间也基本没有区别。
A组or和in的执行时间: or的执行时间为:0.002s     in的执行时间为:0.002s
B组or和in的执行时间: or的执行时间为:0.006s     in的执行时间为:0.005s  
C组or和in的执行时间: or的执行时间为:0.008s     in的执行时间为:0.008s
D组or和in的执行时间: or的执行时间为:0.020s     in的执行时间为:0.019s 效率

第三种状况,目标列没有索引的状况,4组测试执行计划就不同,执行的时间也有了很大的区别。
A组or和in的执行时间: or的执行时间为:5.016s      in的执行时间为:5.071s
B组or和in的执行时间: or的执行时间为:1min 02s     in的执行时间为:5.018s
C组or和in的执行时间: or的执行时间为:1min 50s     in的执行时间为:5.010s数据

D组or和in的执行时间: or的执行时间为:6min 13s     in的执行时间为:5.047s查询

结论:时间

in和or的效率,取决目标条件列是否有索引或者是不是主键,若是有索引或者主键性能没啥差异,若是没有索引,in的性能要远远优于or.

相关文章
相关标签/搜索