
有人做了这么一组实验(测试库数据为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'这将返回城市为“伦敦”、“纽约”或“巴黎”的行。欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)