联合索引、覆盖索引和索引下推详解
组合索引
也称联合索引,相较于单字段索引,此索引对多个字段加索引。
最左匹配原则
加索引时对顺序敏感,(f1,f2,f3)查询时只能按顺序写,如下
where f1 like 'x%' and f2 = x and f3 = x
当然不按顺序写解释器也会帮我们改正顺序。
但也不是所有场景都能优化的,一般的原则是根据第一个字段精确查询,再根据第二个字段精确查询,依次类推。
一旦中间有一个模糊查询或者范围查询都会提前中断,导致后面的条件都用不到索引。
还有就是模糊查询一定要有前缀,否则也不走索引。
举个例子
-- f1模糊查询没有前缀,不能走索引
where f1 like '%x' and f2 = x and f3 = x
-- f1用到函数,不能走索引
where f1+1 = x and f2 = x and f3 = x
覆盖索引
减少一次回表查询,条件是查询的字段值就包含在索引中,还拿(f1,f2,f3)举例
-- 由于f3就在索引中,少了回表的操作
select f3 where f1 = x and f2 = x
索引下推
通过最左匹配原则我们知道有一个模糊匹配或者范围查询后,右侧的条件都不能走索引了,但是5.6的一个新特性可以支持继续向后走索引
-- 之前说f2就不能走索引了,由于索引下推则可以走索引了
where f1 like '%x' and f2 = x and f3 = x
https://blog.csdn.net/weixin_40650387/article/details/130127428