前言

MRR 是 Multi-Range Read 的简写,目的是减少磁盘随机访问,将随机访问转化为较为顺序的访问。适用于 range/ref/eq_ref 类型的查询。

实现原理:

1、在二级索引查找后,根据得到的主键到聚簇索引找出需要的数据。

2、二级索引查找得到的主键的顺序是不确定的,因为二级索引的顺序与聚簇索引的顺序不一定一致;

3、如果没有 MRR,那么在聚簇索引查找时就可能出现乱序读取数据页,这对于机械硬盘是及其不友好的。

4、MRR 的优化方式:

将查找到的二级索引键值放在一个缓存中;

将缓存中的键值按照 主键 进行排序;

根据排序后的主键去聚簇索引访问实际的数据文件。

5、当优化器使用了 MRR 时,执行计划的 Extra 列会出现 “Using MRR” 。

6、如果查询使用的二级索引的顺序本身与结果集的顺序一致,那么使用 MRR 后需要对得到的结果集进行排序。

使用 MRR 还可以减少缓冲池中页被替换的次数,批量处理对键值的查询操作。

可以使用命令 select @@optimizer_switch; 查看是否开启了 MRR:

index_merge=on,index_merge_union=on,index_merge_sort_union=on,index_merge_intersection=on,engine_condition_pushdown=on,index_condition_pushdown=on,mrr=off,mrr_cost_based=on,block_nested_loop=on,batched_key_access=off,materialization=on,semijoin=on,loosescan=on,firstmatch=on,duplicateweedout=on,subquery_materialization_cost_based=on,use_index_extensions=on,condition_fanout_filter=on,derived_merge=on,use_invisible_indexes=off,skip_scan=on

mrr_cost_based=on 表示是否通过 cost based 的方式来选择使用 MRR 。

用 set @@optimizer_switch='mrr=on/off'; 命令开启或关闭 MRR 。

select @@read_rnd_buffer_size ;参数用来控制键值的缓冲区大小,默认 256K,当大于该参数值时,执行器根据主键对已缓存的数据进行排序,然后再通过主键取得行数据。

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对我们的支持。

本文标题: MySQL InnoDB MRR优化指南

本文地址: http://www.cppcns.com/shujuku/mysql/268061.html

mysql using mrr_MySQL InnoDB MRR优化指南相关推荐

  1. Innodb MRR优化

    Mysql5.6版本开始支持MRR(Multi-Range Read)优化,其目的是为了减少磁盘的随机访问,并将随机访问转化为较为顺序的数据访问.这对于IO-bound类型的Sql查询语句可带来性能的 ...

  2. mysql开启mrr_mysql 之 MRR

    Multi-Range Read (MRR) MRR 的全称是 Multi-Range Read Optimization,是优化器将随机 IO 转化为顺序 IO 以降低查询过程中 IO 开销的一种手 ...

  3. mysql mrr cost based,MySQL InnoDB MRR 优化

    MRR 是 Multi-Range Read 的简写,目的是减少磁盘随机访问,将随机访问转化为较为顺序的访问.适用于 range/ref/eq_ref 类型的查询. 实现原理: 在二级索引查找后,根据 ...

  4. mysql using mrr_MySQL 的 MRR 到底是什么?

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

  5. MySQL · 引擎特性 · InnoDB COUNT(*) 优化(?)

    在5.7版本中,InnoDB实现了新的handler的records接口函数,当你需要表上的精确记录个数时,会直接调用该函数进行计算. 使用 实际上records接口函数是在优化阶段调用的,在满足一定 ...

  6. mysql 5.1 innodb trx_mysql 优化innodb_flush_log_at_trx_commit的案例介绍

    mysql 优化innodb_flush_log_at_trx_commit的案例介绍,供大家学习参考. 问题描述: Win7上装了一个MYSQL,需要向表中插入160多万条数据,SQL文件大概126 ...

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

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

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

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

  9. MySQL 最全优化指南

    MySQL 最全优化指南 当MySQL单表记录数过大时,增删改查性能都会急剧下降,所以我们本文会提供一些优化参考,大家可以参考以下步骤来优化: 一.单表优化 除非单表数据未来会一直不断上涨,否则不要一 ...

最新文章

  1. ActionScript3.0自定义Flex组件问题 重写组件的使用
  2. 单链队列实现及基本操作
  3. JAVA中CLASS.FORNAME的含义
  4. c++ map用法_5分钟掌握Python | Map、Reduce和Filter如何运用?
  5. 我的联想C467鲁大师检查配置
  6. 实用的 Python —— 快速进行相关计算
  7. 《程序员的数学》读书计划
  8. 如何修复Win10下的 flashplayer?
  9. 【禁用U盘】电脑windows7/10注册表、组策略禁用优盘;
  10. 231 订单支付 苹果内购
  11. 双系统,win7重装后,找回linux
  12. 浏览器与web服务器的交互过程
  13. APICloud AVM多端开发 | 《外卖app开发》项目源码深度解析(上)
  14. springcloud集成sentinel 《微服务》
  15. SQL语句(六)_NUIST
  16. SpringBoot Web项目结构梳理
  17. Windows 下彻底删除sqlserver(亲测有效)
  18. 手动安装Dameware在Win98的客户端
  19. 不用找,你想要的车样机图片素材都在这里
  20. 暴雪娱乐-魔兽世界:道具艺术和关卡设计

热门文章

  1. SQL Server 中as语句后加英文,标点符号等内容
  2. 64位windowes系统实现 gpt和mbr 双引导
  3. Graphics 绘图
  4. 淘宝关键词搜索商品接口,关键词搜索淘宝商品接口API接入说明
  5. go语言测试框架Convey+Monkey的使用
  6. 带流量控制的交通灯三菱FX系列PLC程序3 有io分配表和PLC原理图
  7. html图片怎么放在页眉的中心,如何将HTML页眉和页脚添加到页面?
  8. 社区居家养老实践中的问题,以及捷径智慧养老系统解决方案-捷径系统
  9. 从P1到P7——第八年
  10. JS数组的some()