MySQL5.6新特性之Multi-Range Read

php中文网
发布: 2016-06-07 15:53:24
原创
1109人浏览过

MySQL 5.6版本提供了很多性能优化的特性,其中之一就是 Multi-Range Read 多范围读(MRR) , 它的作用针对基于辅助/第二索引的查询

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

select non_key_column from tb wherekey_column=x;
MySQL 执行查询的伪代码

第一步 先根据where条件中的辅助索引获取辅助索引与主键的集合,结果集为rest。
 
      select key_column, pk_column from tb where key_column=x order by key_column

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

      for each pk_column value in rest do:

      select non_key_column from tb where pk_column=val

MySQL5.6新特性之Multi-Range Read

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

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

第一步 先根据where条件中的辅助索引获取辅助索引与主键的集合,结果集为rest
 
      select key_column, pk_column from tb where key_column = x order by key_column

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

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

AI Content Detector
AI Content Detector

Writer推出的AI内容检测工具

AI Content Detector 119
查看详情 AI Content Detector

      select non_key_column fromtb where pk_column in ( rest_sort )

MySQL5.6新特性之Multi-Range Read

从图示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时


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

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

+----+-------------+-------+-------+---------------+------+---------+------+------+-------------------------------------------+

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

+----+-------------+-------+-------+---------------+------+---------+------+------+-------------------------------------------+

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

本文永久更新链接地址

最佳 Windows 性能的顶级免费优化软件
最佳 Windows 性能的顶级免费优化软件

每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号