千家信息网

如何理解MySQL5.6的新特性Multi-Range Read

发表于:2025-12-03 作者:千家信息网编辑
千家信息网最后更新 2025年12月03日,如何理解MySQL5.6的新特性Multi-Range Read,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。一 介绍M
千家信息网最后更新 2025年12月03日如何理解MySQL5.6的新特性Multi-Range Read

如何理解MySQL5.6的新特性Multi-Range Read,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。

一 介绍
MySQL 5.6版本提供了很多性能优化的特性,其中之一就是 Multi-Range Read 多范围读(MRR) , 它的作用针对基于辅助/第二索引的查询,减少随机IO,并且将随机IO转化为顺序IO,提高查询效率。
二 原理
在没有MRR之前,或者没有开启MRR特性时,MySQL 针对基于辅助索引的查询策略是这样的:

  1. select non_key_column from tb wherekey_column=x;

MySQL 执行查询的伪代码

  1. 第一步 先根据where条件中的辅助索引获取辅助索引与主键的集合,结果集为rest。

  2. select key_column, pk_column from tb where key_column=x order by key_column

  3. 第二步 通过第一步获取的主键来获取对应的值。

  4. for each pk_column value in rest do:

  5. select non_key_column from tb where pk_column=val


由于MySQL存储数据的方式: 辅助索引的存储顺序并非与主键的顺序一致,从图中可以看出,根据辅助索引获取的主键来访问表中的数据会导致随机的IO . 不同主键不在同一个page 里面时必然导致多次IO 和随机读。

在使用MRR优化特性的情况下,MySQL 针对基于辅助索引的查询策略是这样的:

  1. 第一步 先根据where条件中的辅助索引获取辅助索引与主键的集合,结果集为rest

  2. select key_column, pk_column from tb where key_column = x order by key_column

  3. 第二步 将结果集rest放在buffer里面(read_rnd_buffer_size 大小直到buffer满了),然后对结果集rest按照pk_column排序,得到结果集是rest_sort

  4. 第三步 利用已经排序过的结果集,访问表中的数据,此时是顺序IO.

  5. select non_key_column fromtb where pk_column in ( rest_sort )


从图示MRR原理,MySQL 将根据辅助索引获取的结果集根据主键进行排序,将乱序化为有序,可以用主键顺序访问基表,将随机读转化为顺序读,多页数据记录可一次性读入或根据此次的主键范围分次读入,以减少IO操作,提高查询效率。

三 相关参数

我们可以通过参数 optimizer_switch 的标记来控制是否使用MRR,当设置mrr=on时,表示启用MRR优化。mrr_cost_based 表示是否通过 cost base的方式来启用MRR.如果选择mrr=on,mrr_cost_based=off,则表示总是开启MRR优化。
参数read_rnd_buffer_size 用来控制键值缓冲区的大小。

四 案例介绍
当开启MRR时

  1. MySQL > explain select * from tbl where tbl.key1 between 1000 and 2000;

  2. +----+-------------+-------+-------+---------------+------+---------+------+------+-------------------------------------------+

  3. | id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |

  4. +----+-------------+-------+-------+---------------+------+---------+------+------+-------------------------------------------+

  5. | 1 | SIMPLE | tbl | range | key1 | key1 | 5 | NULL | 960 | Using index condition; Using MRR |

  6. +----+-------------+-------+-------+---------------+------+---------+------+------+-------------------------------------------+

  7. 1 row in set (.03 sec)

五 MRR的使用限
MRR 适用于以下两种情况。
1 range access
2 ref and eq_ref access, when they are using Batched Key Access

看完上述内容是否对您有帮助呢?如果还想对相关知识有进一步的了解或阅读更多相关文章,请关注行业资讯频道,感谢您对的支持。

索引 辅助 结果 顺序 查询 特性 数据 参数 排序 原理 大小 情况 效率 方式 条件 策略 范围 存储 帮助 控制 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 查找2列不同的数据库 国家网络安全基地北京 开展护苗网络安全工作总结 计算网络技术专业相关工作 cs1.6服务器网页管理 江苏正规软件开发哪家可靠 软件技术数据库学几个学期 大兴区口碑好的软件开发推荐咨询 梦幻西游湖北区的服务器虚拟主机 只做软件开发语言学c吗 高校网络安全监测预警通报制度 数据库连接数 复旦大学学生网络安全 数据库的逻辑结构图解 宁津县委网络安全 根域名服务器是远程域名服务器 bigemap离线地图服务器 镇海安卓软件开发项目管理 计算机网络技术选题报告 电脑网络安全防范是什么 服务器 机架式 刀片式 淮安海航软件开发售后服务 数据库删除的表有记录吗 40岁求职软件开发 网络安全的发展和问题论文 哈尔滨金图软件开发有限公司 25怎么学软件开发 巩义市软件开发 软件启动后显示服务器无法响应 datadog监控数据库
0