zoukankan      html  css  js  c++  java
  • 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 被读取。

  • 相关阅读:
    Redis可视化客户端管理及监控工具TreeNMS
    Memcache分布式锁 转发 https://www.cnblogs.com/li150dan/p/9529090.html
    MemCache在.NET中使用Memcached.ClientLibrary详解 转发 https://www.cnblogs.com/li150dan/p/9529112.html
    C# Memcache分布式缓存简单入门
    ASP.NET cache缓存的用法
    .net core redis 驱动推荐,为什么不使用 StackExchange.Redis 转发 https://www.cnblogs.com/kellynic/p/9325816.html
    StackExchange.Redis通用封装类分享
    Windows下Redis缓存服务器的使用 .NET StackExchange.Redis Redis Desktop Manager 转发非原创
    .Net使用Redis详解之ServiceStack.Redis(七) 转载https://www.cnblogs.com/knowledgesea/p/5032101.html
    redis的过期时间和过期删除机制
  • 原文地址:https://www.cnblogs.com/hzcya1995/p/13351285.html
Copyright © 2011-2022 走看看