MySql or和in的区别

MySql or和in的区别,第1张

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

第一种情况:in和or所在列为主键的情形。

第二种情况:in和or所在列创建有索引的情形。

第二种情况:in和or所在列没有索引的情形。

每种情况又采用不同的in和or的数量进行测试。由于测试语句的数据量有4种情况,我这里就称为A组、B组、C组、D组,其中A组为3个值,B组为150个值,C组为300个值,D组为1000个!

or和union是两个不同的东西,前者是逻辑运算符,后者是 *** 作语句,直接比较谁快谁慢的说法是不科学的。两者比较谁快谁慢,必须在具体的语境下才可以作出判断,就像水果和牛肉不能直接说那样好一点,要具体情况具体分析。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/6150122.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-03-16
下一篇 2023-03-16

发表评论

登录后才能评论

评论列表(0条)

保存