8.2.1.13 Multi-Range Read Optimization 多个range 读优化

读记录使用一个range scan 在一个secondary index 可以导致很多的随机磁盘访问 对于基表当表是大的

不是存储在storage 引擎的cache里。 使用Disk-Sweep Multi-Range Read (MRR) 优化,

MySQL 尝试降低堆积磁盘访问的数量对于range scan 通过首先只扫描索引和收集相关行的keys

然后keys 是存储和最终记录是从基表被检索使用主键的顺序。

Disk-sweep MRR是降低 随机磁盘访问的数量和完成一个更加有顺序的扫描

多范围读优化提供这些好处:

1. MRR 让数据记录被顺序的访问相比随机顺序, 基于索引元组。

server 得到一组index 元组集 满足查询条件, 排序它们更具数据记录ID顺序,使用排序的元组来按顺序的检索数据。

这个让数据访问更加有效和更便宜

MRR 启用请求的批量处理对于key 访问需要访问数据记录通过index元组,

比如range index scans和等价关联 使用索引用于关联属性。

MRR 遍历一个index range 的顺序来得到合格的index tuples.

随着那些结果的积累,它们是用于访问相应的数据记录。它是不必要获得所有的index tuples 在开始读取数据记录之前

下面的情景说明当MRR 优化可以是有利的

场景A: MRR 可以用于InnoDB 和MyISAM 表用于index range scans和等值连接操作

1. index 元组的一部分是积累在buffer里

2.元组在buffer 是按它们的数据row id排序的

3. 数据记录是通过 排序的index 元组顺序访问

方案 B:MRR 可以用于NDB 表用于多个范围index scans 或者当执行一个等值连接通过一个属性

1. ranges 的一部分, 可能简单的key 范围, 是累计在一个Buffer 在某个节点 当查询被提交时

2. range 是被发送到执行节点访问数据记录

3. 访问的记录是被打包到packages 发送会回个中心节点

4.接收到的数据是被放置到buffer里

5.数据是从Buffer 读取

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

InnoDB 和MyISAM 不使用MRR 如果full table 记录不需要被访问来产生查询结果

这种情况如果结果可以产生整个依据信息在index元组里(通过覆盖索引) MRR 不能提供任何好处

可以使用MRR的例子,假设有一个索引在(key_part1, key_part2):

SELECT * FROM t
WHERE key_part1 >= 1000 AND key_part1 < 2000
AND key_part2 = 10000; index 有元组组成(key_part1, key_part2) ,排序首先按key_part1 然后按key_part2 没有MRR, 一个index 扫描覆盖所有的index tuples 对于key_part1 范围从1000到2000, 不管key_part2 值在那些元组里。 scan 做额外的工作来延伸 元组在范围包含 key_part2大于1000 使用MRR, scan 是分成多个范围,每个对于一个key_part1 的单个值(1000,1001,....,1999). 每次那些扫描只需要查询元组具有 key_part2 = 10000 如果index 包含 很多元组对于 key_part2 不在10000,MRR 结果在很多少的index tuples 被读取

8.2.1.13 Multi-Range Read Optimization 多个range 读优化的更多相关文章

  1. 为什么range不是迭代器?range到底是什么类型?

    迭代器是 23 种设计模式中最常用的一种(之一),在 Python 中随处可见它的身影,我们经常用到它,但是却不一定意识到它的存在.在关于迭代器的系列文章中(链接见文末),我至少提到了 23 种生成迭 ...

  2. 列表中使用嵌套for循环[i*j for i in range(3) for j in range(3)]

    利用嵌套for循环形成一个新列表 [i*j for i in range(3) for j in range(3)]相当于如下代码 li=[] for i in range(3): for j in ...

  3. Individual Project - Word frequency program - Multi Thread And Optimization

    作业说明详见:http://www.cnblogs.com/jiel/p/3978727.html 一.开始写代码前的规划: 1.尝试用C#来写,之前没有学过C#,所以打算先花1天的时间学习C# 2. ...

  4. Table.Range保留中间指定的….Range/Middle(Power Query 之 M 语言)

    数据源: "姓名""基数""个人比例""个人缴纳""公司比例""公司缴纳"&qu ...

  5. 前端资讯周报 3.13 - 3.19: WebVR来了!以及如何优化scroll事件性能

    每周一我都会分享上一周我订阅的技术站点中,和解决问题的过程中阅读到的值得分享的文章.这是迫使我学习的一个动力 本周推荐 Minecraft in WebVR with HTML Using A-Fra ...

  6. 6.13校内互测 (DP 带权二分 斜率优化)

    丘中有麻plant 改自这儿,by ZBQ. 还有隐藏的一页不放了.. 直接走下去的话,如果开始时间确定那么到每个点的时间确定,把time减去dis就可以去掉路程的影响了. 这样对于减去d后的t,如果 ...

  7. MySQL Range Optimization

    8.2.1.3 Range Optimization MYSQL的Range Optimization的目的还是尽可能的使用索引 The range access method uses a sing ...

  8. [LeetCode] Range Sum Query - Mutable 区域和检索 - 可变

    Given an integer array nums, find the sum of the elements between indices i and j (i ≤ j), inclusive ...

  9. Python 中xrange和range区别

    先看看Python help()的说明 help(range) Help on built-in function range in module __builtin__: range(...) ra ...

随机推荐

  1. 一、进程与信号之exec函数system函数

    exec函数: 子进程调用exec函数执行另一个程序,exec函数进程完全由新程序代替,替换原有程序正文,数据,堆,栈段 #include <unistd.h> extern char * ...

  2. (Relax 水题1.2)POJ 1032 Parliament(将n分解成若干个互不相等的整数的和,并且是这些整数的乘积最大)

    题意:给出一个数n,将其拆分为若干个互不相等的数字的和,要求这些数字的乘积最大. 分析:我们可以发现任何一个数字,只要能拆分成两个大于1的数字之和,那么这两个数字的乘积一定大于等于原数.也就是说,对于 ...

  3. CodeForces 146E - Lucky Subsequence DP+扩展欧几里德求逆元

    题意: 一个数只含有4,7就是lucky数...现在有一串长度为n的数...问这列数有多少个长度为k子串..这些子串不含两个相同的lucky数... 子串的定义..是从这列数中选出的数..只要序号不同 ...

  4. C++库研究笔记——Linux下是否需要使用memory pool?

    Linux Slab分配器(一)--概述 Linux slab 分配器剖析 C++库研究笔记——内存池实现 做了一些测试:发现linux使用内存池与否没有明显差别,仅仅有2倍. Linux内存处理机制 ...

  5. 【移动开发】Android中WIFI开发总结(一)

     WIFI就是一种无线联网技术,常见的是使用无线路由器.那么在这个无线路由器的信号覆盖的范围内都可以采用WIFI连接的方式进行联网.如果无线路由器连接了一个ADSL线路或其他的联网线路,则又被称为“热 ...

  6. 关于js跨域

    get方式: 称为jsonp,就是js的跨域通信方式,因为知道有些标签可以跨域获取内容,例如img,script,link...,jsonp就是把动态创建一个script标签,然后配置src属性,后台 ...

  7. MegaCLI SAS RAID Management Tool

    MegaCLI SAS RAID Management Tool  Ver 8.04.08 July 05, 2012    (c)Copyright 2011, LSI Corporation, A ...

  8. OD: Vulnerability Detection

    终于看完第二篇漏洞利用原理高级篇,内容虽然看懂了,但深入理解不够,这部分内容以后还要不断强化. 第三篇是漏洞挖掘技术,篇首的话中,提到程序的不可计算性(图灵机的停机问题).希伯尔数学纲领的失败,结尾说 ...

  9. spring aop切面配置

    <bean id="aopLog" class="sardine.commodity.biz.AopLog"/>    <aop:config ...

  10. iOS中解析 XML / JSON

    JSON数据格式 1. 概述: JSON (JavaScript Object Notation) 是⼀一种轻量级的数据交换格式 基于⽂文本格式,易于⼈人阅读和编写,同时也易于机器解析和⽣生成. 2. ...