造成索引失效有多个原因,本文讲解索引失效的原因有哪些
1. 全值匹配
给employee表建立一个复合索引
CREATE INDEX idx_name_dpeid_age on employee(name,dep_id, age)
查询时候尽量全部用上建立的复合索引
2. 最佳左前缀法则
如果建立了多列索引,要遵守最左前缀法则,指的就是从索引的最左列开始,并且不跳过索引中的列。
跳过第一个,索引失效
跳过前两个,索引失效
跳过中间一个只有第一个生效
顺序可以乱
说明不遵循左前缀法则,会导致索引失效
3. 不在索引列上做任何操作
计算,函数,类型转换等会导致索引失效而转向全表扫描
4. 范围条件右边的索引失效
5. 索引列使用不等于(!=或者<>)的时候无法使用索引会导致全表扫描
6. is not null 无法使用索引
7. 少于or用or连接时导致索引失效
8. like以通配符开头(%qw)索引失效变成全表扫描
为了避免以上情况索引失效,我们可以使用覆盖索引来避免以上情况
*** 尽量使用覆盖索引
覆盖索引:查询的字段和建立的字段刚好吻合,这种我们称为覆盖索引