0002.Multi-Range Read(MRR)优化

1. 功能的出现&目的

MySQL5.6版本开始支持MRR优化。主要目的是为了减少对磁盘的随机访问,将其转化为较为顺序的数据访问。适用于rangerefeq_ref类型的查询。

2.好处

  • 使数据访问变得较为顺序。
  • 辅助索引查询得到书签后,先对主键进行排序,再按序进行查找
  • 减少缓冲池中页被替换的次数
  • 批量处理对键值的查询操作

3. 具体操作步骤如下

  • 先把查询到的辅助索引键值放在缓存中(此时是自然的按照辅助索引键值排序的)
  • 将这些键值按照主键进行排序
  • 将排序后的主键使用聚集索引查找
  • 此外,如果缓冲池不够大,在查找某一条时,读进该页,这页会很快被移出缓冲池。如果查找是没有顺序的,可能这页被移除后,很快又要被读进来。这样对同一页反复移入移出,会有很大的消耗。而如果查找是有顺序的,将会极大地避免这种情况。

4.示例

MRR还可以将某些范围查询,拆分为键值对,以此来进行批量数据查询。这样可以在拆分过程中,直接过滤掉一些不符合查询条件的数据。例如:

SELECT * FROM t WHERE a>=1000 AND a<2000 AND b =1000;

表中建有(a,b)的联合索引。如果没有MRR优化,优化器将会先把满足a>=1000 AND a<2000的所有数据取出,待到取出完后再根据 b =1000的条件进行过滤。这样会使很多无用数据被取出,如果无用数据数量很多,将会浪费很多时间。

启用了MRR优化后,优化器先将查询条件拆分,(1000,1000)(1001,1000)(1002,1000)……根据这些条件进行查询,这样取出的数据就都是有用的数据了。

0002.Multi-Range Read(MRR)优化

上一篇:信道复用技术


下一篇:0001.索引