SQL语句中 IN和OR的区别为
区别:
1、in通过父查询表和子自查询表作hash连接操作查询;
or是对父查询表作loop循环后再对子查询表进行查询;
2、在没有索引或者主键的情况下,随着in或or后面的数据量增多,or的执行效率会有明显下降,in的执行效率不会明显下降。
in 和 or的效率 取决目标条件列是否有索引或者主键,如果有索引或者主键,性能没有什么差别,如果没有索引,in的性能远远高于or
a in (1,2,3)
a = 1 or a = 2 or a = 3
where a in (1,3) and b = 2
等同于
where (a = 1 or a = 3) and b = 2
等同于
where a = 1 and b = 2 or a = 3 and b = 2
等同于
where (a = 1 and b = 2) or (a = 3 and b =2 )
where a in (1,3) and b = 2
但不等同于
where a = 1 or a = 3 and b = 2
此处主要强调优先级的高低,复杂逻辑语句养成带()的好习惯,防止歧义,利于他人与自己后期维护。