转载于: https://blog.51cto.com/lee90/2058185

什么是MRR?

MRR:multi range read。

本质: MRR 在本质上是一种用空间换时间的算法

不好解释,先来看个例子:

select * from tb 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。(在Oracle里第2步叫回表?)

在有MRR的情况下,它是这样执行的:

1.  select key_column, pk_column from tb where key_column = x  order by key_column ---> 假设这个结果集是t

2.  将结果集t放在buffer里面(直到buffer满了),然后对结果集t按照pk_column排序      ---> 假设排序好的结果集是t_sort

3.  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。

所以说MRR主要解决的就是这两个问题。

此外,MRR还可以将某些范围查询,拆分为键值对,以此来进行批量的数据查询。这样做的好处是可以在拆分过程中,直接过滤一些不符合查询条件的数据。

如:

官方文档:https://dev.mysql.com/doc/refman/5.7/en/mrr-optimization.html

> SELECT * FROM t WHERE key_part1 >=1000 AND key_part1 < 2000 AND key_part2 = 1000;

表t有(key_part1,key_part2)的联合索引,因此索引根据key_part1,key_part2的位置关系进行排序。若没有MRR,此时查询类型为Range,SQL优化器会先将key_part1大于1000且小于2000的数据都取出来,即便key_part2不等于1000。取出后再根据key_part2的条件进行过滤。这会导致无用的数据被取出。

如果启用MRR优化器会使性能有巨大的提升,优化器会先将查询条件拆分为(1000,1000),(1001,1000),(1002,1000)....(1999,1000) 最后再根据这些拆分出的条件进行数据的查询。

是否启用MRR优化,可以通过参数optimizer_switch中的flag来控制。当MRR为on时,表示启用MRR优化。mrr_cost_based表示是否通过costbased的方式来选择是否启用mrr。若设置mrr=on,mrr_cost_based=off,则总是启用MRR优化。如下:

> SET GLOBAL optimizer_switch='mrr=on,mrr_cost_based=off';

参数read_rnd_buffer_size用来控制键值的缓冲区大小。当大于该值时,则执行器对已经缓存的数据根据RowID进行排序,并通过RowID来取得行数据,该值默认是256KB

>show VARIABLES like 'read_rnd_buffer_size';

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

| Variable_name        |   Value |

|----------------------+---------|

| read_rnd_buffer_size |  262144 |

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

mysql optimizer mrr_mysql mrr介绍相关推荐

  1. mysql开启mrr_MySQL MRR介绍

    这个文章的原始出处找不到了. 什么是MRR? MRR:multi range read.不好解释,先来看个例子: select * from tb where key_column = x 在没有MR ...

  2. mysql optimizer mrr_mysql 索引优化特性之MRR

    MRR针对于辅助索引上的范围查询进行优化,收集辅助索引对应主键rowid.进行排序后回表查询,随机IO转顺序IO 当我们需要对大表(基于辅助索引)进行范围扫描时,会导致产生许多随机/O.而对于普通磁盘 ...

  3. mysql optimizer mrr_MySQL优化器功能开关optimizer_switch

    MySQL 8.0新增特性 use_invisible_indexes:是否使用不可见索引,MySQL 8.0新增可以创建invisible索引,这一开关控制优化器是否使用invisible索引,on ...

  4. mysql optimizer mrr_[转] MySQL 的 MRR 到底是什么?

    引入 MRR,全称「Multi-Range Read Optimization」. 简单说:MRR 通过把「随机磁盘读」,转化为「顺序磁盘读」,从而提高了索引查询的性能. 至于: 为什么要把随机读转化 ...

  5. MySQL—05—MySQL如何处理SQL语句;MySQL数据库存储引擎介绍;

    一. MySQL 中的执行计划 1 MySQL 执行计划 在 MySQL 中可以通过 explain 关键字模拟优化器,执行 SQL 语句,从而知道 MySQL 是 如何处理 SQL 语句的. 2 M ...

  6. MySQL Cluster 群集安装环境介绍

    MySQL Cluster 群集安装环境介绍 MySQL 群集支持的操作系统: * Linux (Red Hat, Novell/SUSE) * Sun Solaris * IBM AIX * HP- ...

  7. mysql optimizer组件_MySQL Optimizer

    最后更新:2018-10-09 当前版本:1.9.1 应用大小:8.8 MB 应用语言:英文 系统要求:OS X 10.11 或更高 应用描述: MySQL和MariaDB优化工具 MySQL Opt ...

  8. Mysql数据库的简单介绍

    在当今的大数据时代,数据库已成为必不可少的数据工具.什么是数据库呢,数据库(Database)是按照数据结构来组织.存储和管理数据的仓库. MYSQL是目前最为流行的关系型数据库系统,关系型数据库系统 ...

  9. [转载]MySQL exists的用法介绍

    原文摘自:http://www.cnblogs.com/glory-jzx/archive/2012/07/19/2599215.html MySQL exists的用法介绍 有一个查询如下: 1 S ...

最新文章

  1. 男人约会动机大揭秘。
  2. 百度开源的 71 个项目,看看你用过几个?
  3. python读取中文-python读取中文txt文本
  4. Java TheadLocal
  5. 驱动框架2——内核驱动框架中LED的基本情况、初步分析
  6. 【JAVA 第五章 】课后习题 Vector类的 初使用
  7. 输入问题C++字符数组越界问题的一个案例分析
  8. LeetCode--026--删除排序数组中的重复项(java)
  9. 微信APP支付 C#
  10. # Vue 组件开发打包、Vue 项目打包、js库组件库打包使用
  11. vscode终端显示中文字符乱码解决
  12. 高质量代码命名规则 代码整洁之道
  13. 基于数据挖掘技术的客户保有应用研究
  14. mysql 进行加减乘除运算,mysql加减乘除
  15. c++【吃鸡坑人版8.0】免费复制
  16. 3 万字 + 100 张图带你彻底搞懂 TCP 面试题(强烈建议收藏)
  17. “===”、“==” 的区别
  18. 多系统单点登录(sso)设计
  19. Jumpstart Client安装日志
  20. 微软等数据结构+算法面试100题全部答案集锦 复制过来比较乱

热门文章

  1. 云栖谷楼盘沙盘_云栖谷图片相册,户型图,样板间图,装修效果图,实景图-长沙房天下...
  2. 商务邮箱注册大全,邮箱有哪些类型可选择?
  3. Graphics类绘制图形
  4. android 从手机自带图库选取图片作为应用背景图
  5. MATLAB电动助力转向系统/EPS模型
  6. [设计模式]设计模式之禅关于单例模式
  7. 如何利用悟空CRM实现售后服务派工单管理
  8. EN 14351-1窗和外部行人门—CE认证
  9. ​RV050蜗轮蜗杆减速机可以配多大功率的电机?
  10. 计算机防ping取消,如何防止别人ping通本地电脑