二级索引回表优化 —— MRR 优化

MRR 是什么

MRR,全称「Multi-Range Read Optimization」。简单说:MRR 通过把「随机磁盘读」,转化为「顺序磁盘读」,从而提高了索引查询的性能。主要是通过二级索引查找后进行回表操作时,将主键 ID 进行排序。默认是不开启,链接中有开启的方法。

MRR 是一个空间换时间的算法。使用内存将主键 ID 排序后,再顺序去磁盘查找数据。优点是,如果将某一页读取到内存后,顺序查找可能会继续使用内存的页,降低页的频繁更换。

MySQL 的 MRR 到底是什么? - 知乎

二级索引回表优化 —— 索引下推

如果现在有一个需求:检索出表中“名字第一个字是张,而且年龄是 10 岁的所有男孩”。那么,SQL 语句是这么写的:

mysql> select * from tuser where name like '张%' and age=10 and ismale=1;

若此时有一个 (name, age) 索引,那么索引下推的效果为:

开启索引下推后,会先进行筛选,去除 age 不为 10 的数据,延迟查找主库的数目。