文章目录
- 前言
- 覆盖索引
- 索引下推
- 总结
前言
之前文章介绍了索引的类型有那些,然后索引的实现是怎么样的。索引的底层结构是什么样的。今天我们介绍一些索引的用法。比如常见的索引失效场景和索引用法。
覆盖索引
之前我们说过,普通索引的节点上存储的是主键索引的值,索引在查询数据的时候,要用到普通索引的时候,会有回表的过程。索引如果我们是多个条件查询的话,如果想提升查询速度。使多个索引的话,会导致回表次数过多,而导致查询变慢。
这个时候覆盖索引就排上用场了,如果多个查询条件,我们可以使用覆盖索引,将多个查询条件覆盖里面。这样就只会回表一次。但是有个需要注意的是,覆盖索引遵顼左前原则。也就是你的查询条件是a=0,b=1,c=2;那么你的覆盖索引是能是(a,b,c),如果不是按照这个顺序来的,那么索引就会失效。
那么为什么一定这样呢,那是因为,索引在匹配的时候,是从左往右的。就是如果你的查询条件写成,a=0,c=1,b=2,这个顺序的话,它在匹配到a这个索引之后,继续往下匹配的时候,发现条件是c而索引是b,就会匹配不上,这个索引就会失效。这个就是所谓的左前缀原则。
索引下推
什么是索引下推呢,简单的来说就是,你的左前索引失效了,然后可以用到后面的一个索引。比如(name,age) 的复合索引,你的查询条件为like%张and age = 3,这种情况下,通过我们上面介绍的覆盖索引内容我们可以知道,这个索引是匹配上了,索引应该是生效的。但是因为左前模糊查询,会导致索引失效。所以第一个索引name就会失效,那会不会导致整个复合索引失效呢,答案是不会,年龄的那个索引依然会生效的。这个就是所谓的索引下推。
下面是有索引下推,和无索引下推的查询流程图,大家可以看下。
总结
今天索引相当于是对之前索引文章的一个补充把,介绍一些日常会用到的一些索引的用法,可能会出现的失效场景。当然关于详细的索引失效场景和原因,我们在之后的文章会再做,详细的介绍。