8.2.1.13 Multi-Range Read Optimization 多个范围读优化

8.2.1.13 Multi-Range Read Optimization 多个范围读优化

使用range scan 来读取数据库在一个 secondary index 可以导致需要的随机磁盘读写

当表是大的和不是存储的在存储引擎的cache里的时候。

Disk-Sweep Multi-Range Read (MRR)优化,MySQL 尝试降低随机磁盘访问对于range scan的次数

通过首先扫描只有索引和采集相关记录的keys,

然后keys 被存储,最后记录从基表使用primary key order检索。Disk-sweep MRR 的动机是降低

随机磁盘访问的次数,实现一个更连续扫描基表的方法。

Multi-Range Read 优化提供了这些好处:

MRR 使数据被访问时顺序的而不是随机的,基于index tuples.

server 得到一组index tuples满足查询条件,根据数据ROW ID 排序它们,

使用排序的tuples来按顺序检索数据。这样使数据访问更加有效,

MRR可以让请求key 访问的批量作业,需要访问数据通过index tuples,比如range index scans

和等价的关联使用index用于关联属性。

MRR 遍历一个顺序的index range 来得到需要的index tuples,由于这些结果积累,

它们被用来访问响应的数据记录。没有必须要在开始读取数据前获得所有的index tuples.

下面的假设说明什么时候MRR优化可以是有好处的:

场景A: MRR 可以用于InnoDB 和MyISAM 表用用于index range scan和等值关联操作

  1. index tuples的部分是积累在一个Buffer里

  2. 在Buffer中的tuples 是按它们的data row ID 排序

3.根据排序索引tuples顺序来访问数据

方案B: MRR 可以用于NDB 表用于 multiple-range index scans 或者当执行一个等价关联

1.ranges的一部分,可能是 single-key ranges,是累计在一个buffer 在中央节点

2.ranges 被发送到执行节点,访问数据

3.访问的行是被打包到一个packages,并发挥给中心节点

4.接收到的包的数据被放置到一个Buffer

5.从Buffer中读取数据

当MRR被读取, 额外的列在EXPLAIN 输出显示使用MRR:

InnoDB和MyISAM 不使用MRR 如果全表记录需要被访问来产生查询结果。 这是因为如果结果能产生完全的信息基于

Index tuples(通过覆盖索引),MRR 变的没好处。

查询用于MRR 可以被使用,假设这里有一个index 在on (key_part1, key_part2):

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

index 包含tupes (key_part1, key_part2) values, 首先按key_part1然后按key_part2排序

没有MRR, 一个Index scan 覆盖所有index tuples 对于key_part1 从1000到2000,

无论对 key_part2值在那些tuples里, scan做额外的工作来扩展tuples 在范围包含ey_part2 values other than 10000.

MRR, scan可以分成多个ranges, 每个单一值key_part1(1000, 1001, … , 1999).

这些扫描只需要查询 tuples 中的key_part2=1000. 如果index 包含很多的tuples 但是key_part2不是等于10000,

MRR 产生很少的index tuples 被读取。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

scan724

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值