MySQL 5.6新特性MRR
**一、什么是MRR **
MMR全称是Multi-Range Read,是MYSQL5.6优化器的一个新特性,在MariaDB5.5也有这个特性。优化的功能在使用二级索引做范围扫描的过程中减少磁盘随机IO和减少主键索引的访问次数。是优化器将随机 IO 转化为顺序 IO 以降低查询过程中 IO 开销的一种手段。(参考: https://blog.csdn.net/caomiao2006/article/details/52205177)
**二、MRR和没有MRR的区别 **
给出一个简单的例子,在innodb表执行下面的查询:
SELECT non_key_column FROM tbl WHERE key_column=x
在没有MRR的情况下,它是这样得到结果的:
1. select key_column, pk_column from tb where key_column=x order by key_column —> 假设这个结果集是t
2. for each row in t ; select non_key_column from tb where pk_column = pk_column_value。(回表)
在有MRR的情况下,它是这样执行的:
1. select key_column, pk_column from tb where key_column
= x order by key_column
—> 假设这个结果集是t
2. 将结果集t
放在buffer
里面(直到read_rnd_buffer_size
这个buffer满了),然后对结果集t按照 pk_column
排序 —> 假设排序好的结果集是t_sort
3. select non_key_column
from tb where pk_column
in (select pk_column
from t_sort
)
By admin
read more