什么是索引下推?

807 阅读3分钟

索引下推,听着确实高大上。但了解后,其实也没多高大上。简单来说索引下推的作用就是减少回表操作。 mysql5.6加入的新特性。现在都8了,已经不算啥新特性了。我们要掌握理解索引下推,我们还要知道这个特性用在什么场景。并不是所有索引都会有索引下推。索引下推只会出现在联合索引中。那普通索引或者其他索引中,没有索引下推,推,推他的粪球去。

我们来准备测试环境,第一个图是我们准备建的一个表,我们设置了id为主键。 并创建了一个联合索引,由字段zipcode,lastname,firstname 字段所组成的。第二个图是我们插入的几条数据,方便后面测试。

现在我们来查询数据,下面的就是我们的查询sql。第一个条件查询的字段满足索引条件,会走索引。第二个字段由于是左模糊,那么该索引会失效。第三个字段压根不属于联合索引中的字段。所以在走联合索引时,只会筛选满足第一个的条件。第二三个条件并不会进行筛选。假如此时查出来有100条数据,如果不用索引下推,就会进行100次回表操作,当拿到真实数据时,才会再对后面两个字段进行判断。然后再筛选出最后的结果。 如果使用了索引下推,那么就不会着急回表操作,由于lastname字段也是在索引中,所以这时会对满足lastname条件的数据进行过滤。此时如果过滤后就只有10条数据了。那么再将这10条进行回表操作,最后再去过滤最后一个字段。

说到这儿大家也对索引下推,有个大致的了解了。

我们再举个例子,下面这个语句,可以看到所有字段都是索引中的。那么在看他们都生效了吗。嗯! 都生效了,那么此时就不会发生索引下推了。三个判断条件都走索引。最后查找到的数据就是最中要返回的数据了。那么再进行回表操作。

经过以上的说明,我们简单总结以下。

什么是索引下推,作用是什么? 联合索引中某一字段索引未生效时,在回表操作前进行数据的过滤。 减少回表的次数。

什么时候发生索引下推? 首先要是联合索引,并且在判断条件中,要有一些索引字段不生效。

什么时候不会发生索引下推? 就是当所有索引都将生效,那么最后查找出来的结果就是最终返回的结果。就不需要索引下推。