浅谈 MySQL 中的 IN 和 OR

版权声明: https://blog.csdn.net/Dongguabai/article/details/85717383

有的朋友总会纠结于到底是用 IN 好,还是 OR 好,其实理解清楚其中的原理后就很简单了。

在很多关系型数据库中 IN 和 OR 的逻辑是一样的,即将 IN 转化为 OR。但是如果是使用的 MySQL,IN 和 OR 是不同的,特别是在做全表扫描的时候。

假设 col 字段中有这么几条数据:

查询 SQL 如下:

--OR
select * from table where col =1 or col = 2 or col = 3 or col = 4 or col = 5
--IN
select * from table where col in (1,2,3,4,5)

使用 OR 查询的时候,第一条数据 1 会比较是否等于 1,等于 1,OK,再看下一条数据 2,是否等于 1?不等于的话继续往下比较。这样的比较效率是很低的,时间复杂度为 O(n)。

而在使用 IN 的时候,会首先将 IN 里面的数据排序,比较的时候会通过二分法进行比较,这样时间复杂度是 O(log n)。

“58到家数据库30条军规”中也是建议使用 IN。

猜你喜欢

转载自blog.csdn.net/Dongguabai/article/details/85717383