大多数介绍MySQL中SQL优化的文章会提到,尽量避免!=
,因为不会走索引,那么实际上呢?
分析如下
- 如果是
<
、>
、BETWEEN
,那么很明显是走范围索引range
。
!=
是不是可以理解为<
和>
的并集呢? - 实际使用中,建了索引的字段,一般
Cardinality
高,意味着区分度高,才有意义。
而大部分场景!=
不走索引,很有可能只是因为不等于的数据占比很高,走索引不如全表扫描。
从而导致普遍认为!=
不走索引。 - 找到数据分布不均匀的字段,做实验即可验证。
实验如下
表中数据分布
执行计划和实际耗时
结论如下
!=
会走范围索引,效率取决于范围的大小。