MYSQL IN和OR效率问题分析
MYSQL IN和OR效率问题分析
先说结论:IN 比 OR 快
假设检索的列为N,IN 的时间复杂度为 O(LogN),而 OR 的时间复杂度为 O(N)
在数据量少于100条时的情况下差别不大
当要检索的列为主键索引时,IN 的执行速度和 OR 差别不大
当要检索的列为普通索引时,IN 的执行速度和 OR 差别不大
当要检索的列没有索引时,IN的执行速度要远大于 OR
例如:1000条左右的数据,没有索引的情况下执行时间 IN 是在秒级别,而OR是分钟级别的。
为什么 IN 比 OR 快?
SELECT * FROM tbName WHERE KEY IN (a1, a2, …… , an);
SELECT * FROM tbName WHERE KEY = a1 OR KEY = a2 OR …… OR KEY = an;
用不上索引的情况下,遍历全表的 key,去匹配 a1, a2, ……, an
OR,就是从 a1 匹配,匹配失败,去匹配 a2,直到匹配成功或者一个都匹配不上,时间复杂度是 O(N)
IN,先将 a1, a2, ……., an 变成二叉搜索树,用过二叉树查找,时间复杂度为O(LogN)
因此,IN 的效率要高于 OR,参数集合范围越大,IN 的性能不会太大下降,而 OR 会下降非常厉害。
赞 (0)