索引下推


什么是索引下推

索引下推指的是当我们使用到辅助索引时,如果辅助索引的其他字段能够用于判断where条件是否满足,从而减少回表次数,那么就使用这些字段先进行判断.

假设有个表叫做people,有个辅助索引(zipcode, lastname, firstname),运行下列sql语句

1
2
3
4
SELECT * FROM people
WHERE zipcode='95054'
AND lastname LIKE '%etrunia%'
AND address LIKE '%Main Street%';

如果没有索引下推,mysql执行如下流程:

  1. 从辅助索引定位zipcode=95054对应的主键id
  2. 遍历每一个主键id,到主键索引获取整个行,然后根据lastname和address从主键索引对应的行记录中来判断哪些记录满足要求

如果使用索引下推,可以利用辅助索引的lastname这个字段,执行流程如下:

  1. 从辅助索引定位zipcode=95054对应的主键id
  2. 先不去主键索引获取整个行,而是先判断辅助索引中的lastname是否满足’lastname LIKE ‘%etrunia%’’,获取满足所有条件的主键id
  3. 遍历每一个主键id,到主键索引获取整个行,然后获取满足address条件的记录

这种方式利用了辅助索引,提前过滤需要回表的主键id,减少了回表次数.

参考资料

https://dev.mysql.com/doc/refman/8.0/en/index-condition-pushdown-optimization.html


本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!