网上有不少人都在谈论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.