为啥sql语句使用IN的效率不好?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了为啥sql语句使用IN的效率不好?相关的知识,希望对你有一定的参考价值。

看到很多人都不用in 用left join,为什么链接会比IN好?

in的效率是比较低的,但不大会和LEFT JOIN做比较,一般是和exists做比较的。
in的实质就是无数个=,中间用OR连接起来
比如IN (1,2,3)实质上就是=1 or =2 or =3,效率自然不高
参考技术A in 的后面有多少 就遍历多少次 遍历的效率是非常低的 参考技术B Id in (1,2,3)

相当于ID字段全表扫描,然后逐个跟1,2,3中的第一个对比,效率当然低
参考技术C a in(1,2,3,4,5,6,7,8,9)效果等同 a=1 or a=2 or...
这样相当于对字段多条件,进行了全表扫描 效率低

要是数据量不大 不用考虑这么多了
大量的数据 就要考虑sql 的执行效率 需要件索引和视图了

SQL查询效率where语句条件

有索引的列优先,都有索引的看查询出来的数据量,少的优先

in ,not in,<>,is null,is not null 等由于不会走索引,尽量不要使用。

WHERE子句后面的条件顺序对大数据量表的查询会产生直接的影响,如

Select * from zl_yhjbqk where dy_dj = ‘1K以下‘ and xh_bz=1

Select * from zl_yhjbqk where xh_bz=1 and dy_dj = ‘1K以下‘

以上两个SQL中dy_dj及xh_bz两个字段都没进行索引,所以执行的时候都是全表扫描,第一条SQL的dy_dj = ‘1KV以下‘条件在记录集内比率为99%,而xh_bz=1的比率只为0.5%,在进行第一条SQL的时候99%条记录都进行dy_dj及xh_bz的比较,而在进行第二条SQL的时候0.5%条记录都进行dy_dj及xh_bz的比较,以此可以得出第二条SQL的CPU占用率明显比第一条低。










以上是关于为啥sql语句使用IN的效率不好?的主要内容,如果未能解决你的问题,请参考以下文章

sql语句中条件查询里in、like、及=三个的效率怎么样?

access中使用sql语句not in效率太低,有没有效率高的办法啊?

在SQL Server中为啥不建议使用Not In子查询

sql 语句中in ,not in

sql语句,实践证明了某种情况下not in的效率高于not exists

SQL语句一直报无效数字的错,为啥?