mysql using mrr_MySQL InnoDB MRR优化指南
前言
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优化指南相关推荐
- Innodb MRR优化
Mysql5.6版本开始支持MRR(Multi-Range Read)优化,其目的是为了减少磁盘的随机访问,并将随机访问转化为较为顺序的数据访问.这对于IO-bound类型的Sql查询语句可带来性能的 ...
- mysql开启mrr_mysql 之 MRR
Multi-Range Read (MRR) MRR 的全称是 Multi-Range Read Optimization,是优化器将随机 IO 转化为顺序 IO 以降低查询过程中 IO 开销的一种手 ...
- mysql mrr cost based,MySQL InnoDB MRR 优化
MRR 是 Multi-Range Read 的简写,目的是减少磁盘随机访问,将随机访问转化为较为顺序的访问.适用于 range/ref/eq_ref 类型的查询. 实现原理: 在二级索引查找后,根据 ...
- mysql using mrr_MySQL 的 MRR 到底是什么?
MRR,全称「Multi-Range Read Optimization」. 简单说:MRR 通过把「随机磁盘读」,转化为「顺序磁盘读」,从而提高了索引查询的性能. 至于: 为什么要把随机读转化为顺序 ...
- MySQL · 引擎特性 · InnoDB COUNT(*) 优化(?)
在5.7版本中,InnoDB实现了新的handler的records接口函数,当你需要表上的精确记录个数时,会直接调用该函数进行计算. 使用 实际上records接口函数是在优化阶段调用的,在满足一定 ...
- mysql 5.1 innodb trx_mysql 优化innodb_flush_log_at_trx_commit的案例介绍
mysql 优化innodb_flush_log_at_trx_commit的案例介绍,供大家学习参考. 问题描述: Win7上装了一个MYSQL,需要向表中插入160多万条数据,SQL文件大概126 ...
- mysql optimizer mrr_mysql 索引优化特性之MRR
MRR针对于辅助索引上的范围查询进行优化,收集辅助索引对应主键rowid.进行排序后回表查询,随机IO转顺序IO 当我们需要对大表(基于辅助索引)进行范围扫描时,会导致产生许多随机/O.而对于普通磁盘 ...
- mysql optimizer mrr_MySQL优化器功能开关optimizer_switch
MySQL 8.0新增特性 use_invisible_indexes:是否使用不可见索引,MySQL 8.0新增可以创建invisible索引,这一开关控制优化器是否使用invisible索引,on ...
- MySQL 最全优化指南
MySQL 最全优化指南 当MySQL单表记录数过大时,增删改查性能都会急剧下降,所以我们本文会提供一些优化参考,大家可以参考以下步骤来优化: 一.单表优化 除非单表数据未来会一直不断上涨,否则不要一 ...
最新文章
- ActionScript3.0自定义Flex组件问题 重写组件的使用
- 单链队列实现及基本操作
- JAVA中CLASS.FORNAME的含义
- c++ map用法_5分钟掌握Python | Map、Reduce和Filter如何运用?
- 我的联想C467鲁大师检查配置
- 实用的 Python —— 快速进行相关计算
- 《程序员的数学》读书计划
- 如何修复Win10下的 flashplayer?
- 【禁用U盘】电脑windows7/10注册表、组策略禁用优盘;
- 231 订单支付 苹果内购
- 双系统,win7重装后,找回linux
- 浏览器与web服务器的交互过程
- APICloud AVM多端开发 | 《外卖app开发》项目源码深度解析(上)
- springcloud集成sentinel 《微服务》
- SQL语句(六)_NUIST
- SpringBoot Web项目结构梳理
- Windows 下彻底删除sqlserver(亲测有效)
- 手动安装Dameware在Win98的客户端
- 不用找,你想要的车样机图片素材都在这里
- 暴雪娱乐-魔兽世界:道具艺术和关卡设计