数据库
首页 > 数据库> > MySQL 5.6新特性 MRR(Multi-Range Read Optimization)

MySQL 5.6新特性 MRR(Multi-Range Read Optimization)

作者:互联网

官方网站:https://dev.mysql.com/doc/refman/5.6/en/mrr-optimization.html

多范围读取优化(MRR)

explain语句

Disk-sweep MRR 的动机是减少随机磁盘访问的次数,而是实现对基表数据的更顺序扫描。

MRR 允许基于索引元组按顺序访问数据行,而不是按随机顺序访问。

MRR 可用于 InnoDB 和 MyISAM 表的索引范围扫描和等连接操作

图片来自知乎

 

将行id排好序后,再去磁盘顺序访问数据,不会涉及到随机访问的各种磁盘调度,大大降低了访问成本

MRR的好处

不涉及磁盘调度

磁盘和磁头不再需要来回做机械运动

局部性原理

在一次查询中,每一页的数据只会从磁盘读取一次,可以充分利用磁盘预读,大大减少磁盘IO

MySQL 从磁盘读取页的数据后,会把数据放到数据缓冲池,下次如果还用到这个页,就不需要去磁盘读取,直接从内存读。

MRR配置

如果你把 mrr_cost_based 设为 off,那优化器就会通通使用 MRR,即使只有一条数据

Mariadb 对 MySQL 的 MRR做了很多优化

如果使用了覆盖索引,MRR 没有任何意义

对于 MRR,存储引擎使用 read_rnd_buffer_size 系统变量的值作为它可以为其缓冲区分配多少内存的指南

引擎最多使用 read_rnd_buffer_size 字节并确定要在单次传递中处理的范围数

标签:Multi,5.6,访问,Read,MRR,元组,索引,磁盘,数据
来源: https://www.cnblogs.com/SourLemon/p/15587058.html