【mysql】Mysql 5.6新特性MRR
来源:互联网 发布:淘宝子账号怎么登入 编辑:程序博客网 时间:2024/05/21 09:13
一、什么是MRR
MMR全称是Multi-Range Read,是MYSQL5.6优化器的一个新特性,在MariaDB5.5也有这个特性。优化的功能在使用二级索引做范围扫描的过程中减少磁盘随机IO和减少主键索引的访问次数。将随机IO转换为顺序IO
二、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 ---> 假设这个结果集是t2. for each row in t ; select non_key_column from tb where pk_column = pk_column_value。(在oracle里第2步叫回表)在有MRR的情况下,它是这样执行的:1. select key_column, pk_column from tb where key_column = x order by key_column ---> 假设这个结果集是t2. 将结果集t放在buffer里面(直到buffer满了),然后对结果集t按照pk_column排序 ---> 假设排序好的结果集是t_sort3. select non_key_column fromtb where pk_column in (select pk_column from t_sort)
两者的区别主要是两点:
1. 没有MRR的情况下,随机IO增加,因为从二级索引里面得到的索引元组是有序,但是他们在主键索引里面却是无序的,所以每次去主键索引里面得到non_key_column的时候都是随机IO。(如果索引覆盖,那也就没必要利用MRR的特性了,直接从索引里面得到所有数据)
2. 没有MRR的情况下,访问主键索引的次数增加。没有MRR的情况下,二级索引里面得到多少行,那么就要去访问多少次主键索引(也不能完全这样说,因为mysql实现了BNL),而有了MRR的时候,次数就大约减少为之前次数t/buffer_size。
三、与MMR有关的参数
1.MMR的开启参数在 optimizer_switch系统变量里,有两个参数控制,mrr需要设置为ON,mrr_cost_base如果设置为on是基于成本控制,off表示尽可能去使用mrr(The mrr flag controls whether MRR is enabled. If mrr is enabled (on), the mrr_cost_based flag controls whether the optimizer attempts to make a cost-based choice between using and not using MRR (on) or uses MRR whenever possible (off).),mysql5.6默认是开启的状态。
2. MMR使用多少内存做BUFFER是由read_rnd_buffer_size控制,使用的大小主要看一个session使用多少
3.Explain
未使用MMR
使用MMR
四、官方介绍
若不是用MRR,会扫描1000到2000的所有记录不管key_part2的值 若使用MRR,扫描会被分为多个range(1000,1001,…,1999),每个单独的值都会去找key_part2=10000,若有很多组都不是10000,那么MRR只需要读取很少的行。
参考:
http://dev.mysql.com/doc/refman/5.6/en/mrr-optimization.html
http://www.percona.com/blog/2012/03/21/multi-range-read-mrr-in-mysql-5-6-and-mariadb-5-5/
- 【mysql】Mysql 5.6新特性MRR
- 【mysql】关于ICP、MRR、BKA等特性
- mysql 5.6 新特性收录
- MySQL 5.5新特性
- MySQL 5.5新特性
- MySQL 5.5 新特性
- MySQL Server新特性
- MySQL 5.7新特性
- MySQL 5.7 新特性
- MySQL 5.7新特性
- MySQL 5.6 MRR 的存储过程完美诠释
- Multi Range Read (MRR) in MySQL 5.6 and MariaDB 5.5
- mysql 5.6 新特性 主从延迟
- MySQL 5.6的72个新特性
- MySQL 5.6同步复制新特性详解
- MySQL 5.6同步复制新特性详解
- MySQL 5.6的72个新特性
- 5.6新特性之NL,BNL,MRR和BKA(转)
- mysql调优及MySql 处理超大数据量
- Nginx 战斗准备 —— 优化指南
- Linux时间相关命令
- git中的撤销操作
- iOS 典型广告轮播图效果的实现代码
- 【mysql】Mysql 5.6新特性MRR
- 使用POI转换word doc文件
- 4.10.3 使用Glyph Designer创建位图字体
- Android Pay ,被Apple Pay刺激到了!
- 使Trello成为高效敏捷Scrum项目管理工具的十个小技巧
- 给脚本添加颜色
- 面试题之八
- python学习之re模块
- JDBC连接数据库步骤以及代码