mysql索引下推

33 阅读1分钟

什么是索引下推

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

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,减少了回表次数.

参考资料

dev.mysql.com/doc/refman/…