索引下推
什么是索引下推
索引下推指的是当我们使用到辅助索引时,如果辅助索引的其他字段能够用于判断where条件是否满足,从而减少回表次数,那么就使用这些字段先进行判断.
假设有个表叫做people,有个辅助索引(zipcode, lastname, firstname),运行下列sql语句
1 |
|
如果没有索引下推,mysql执行如下流程:
- 从辅助索引定位zipcode=95054对应的主键id
- 遍历每一个主键id,到主键索引获取整个行,然后根据lastname和address从主键索引对应的行记录中来判断哪些记录满足要求
如果使用索引下推,可以利用辅助索引的lastname这个字段,执行流程如下:
- 从辅助索引定位zipcode=95054对应的主键id
- 先不去主键索引获取整个行,而是先判断辅助索引中的lastname是否满足’lastname LIKE ‘%etrunia%’’,获取满足所有条件的主键id
- 遍历每一个主键id,到主键索引获取整个行,然后获取满足address条件的记录
这种方式利用了辅助索引,提前过滤需要回表的主键id,减少了回表次数.
参考资料
https://dev.mysql.com/doc/refman/8.0/en/index-condition-pushdown-optimization.html
本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!