前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >性能优化之MRR

性能优化之MRR

作者头像
用户1278550
发布2018-08-09 11:28:17
1K0
发布2018-08-09 11:28:17
举报
文章被收录于专栏:idbaidba

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

  1. select non_key_col from tb where key_col=x;

MySQL 执行查询的伪代码

  1. 第一步 先根据where条件中的辅助索引获取辅助索引与主键的集合,结果集为rest。
  2. select key_col, pk_col from tb where key_col=x order by key_col
  3. 第二步 通过第一步获取的主键来获取对应的值。
  4. for each pk_column value in rest do:
  5. select non_key_column from tb where pk_column=val

由于MySQL存储数据的方式: 辅助索引的存储顺序并非与主键的顺序一致,从图中可以看出,根据辅助索引获取的主键来访问表中的数据会导致随机的IO . 不同主键不在同一个page 里面时必然导致多次IO 和随机读。 在使用MRR优化特性的情况下,MySQL 针对基于辅助索引的查询策略是这样的:

  1. 第一步 先根据where条件中的辅助索引获取辅助索引与主键的集合rest
  2. select key_col, pk_col from tb where key_col = x order by key_col;
  3. 第二步 将结果集rest放在buffer里面(read_rnd_buffer_size 大小直到buffer满了),然后对结果集rest按照pk_col排序,得到结果集是rest_sort
  4. 第三步 利用已经排序过的结果集,访问表中的数据,此时是顺序IO.
  5. select non_key_col fromtb where pk_col in ( rest_sort )

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

五 MRR的使用限 MRR 适用于以下两种情况。 1 range access 2 ref and eq_ref access, when they are using Batched Key Access 六 参考文章 《MariaDB Multi-Range Read Optimization》 《MySQL Multi-Range Read Optimization》 《Multi Range Read (MRR) in MySQL 5.6 and MariaDB 5.5》

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2018-01-07,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
云数据库 MySQL
腾讯云数据库 MySQL(TencentDB for MySQL)为用户提供安全可靠,性能卓越、易于维护的企业级云数据库服务。其具备6大企业级特性,包括企业级定制内核、企业级高可用、企业级高可靠、企业级安全、企业级扩展以及企业级智能运维。通过使用腾讯云数据库 MySQL,可实现分钟级别的数据库部署、弹性扩展以及全自动化的运维管理,不仅经济实惠,而且稳定可靠,易于运维。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档