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.

我举例说明基本用法吧,lz如果已经有了基础而是要知道更多更深入的知识的话,不需要在知道提问,直接百度里搜索,资料大把大把的,而且不难懂。

表(stu)结构和数据如下:

id name age height

1 abby 14 134

2amelia 13 128

3 ken 14 144

1、in

select t.* from stu t where age in (14, 15)

查询结果是1和3,没有age为15的。

2、or

select t.* from stu t where age = 13 or age = 14

得到所有的3条,这是“或”,年龄为13岁或14岁

3、and

select t.* from stu t where age = 13 and name = 'ken'

没有结果,这是“与”的关系,检索年龄13岁,名字是ken的学生,没有符合条件的。

在Oracle数据库中,两个IN之间使用OR,而不是ON。OR表示“或”,意味着查询将返回两个IN子句中的任何一个。例如,如果您有一个表,其中包含一列名为“城市”,您可以使用以下查询来查找城市为“伦敦”或“纽约”的行:SELECT * FROM table WHERE city IN ('London', 'New York') OR city = 'Paris'这将返回城市为“伦敦”、“纽约”或“巴黎”的行。


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

原文地址:https://54852.com/sjk/6826654.html

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

发表评论

登录后才能评论

评论列表(0条)

    保存