目录

  • Mysql优化(出自官方文档) - 第三篇

    • 1 Multi-Range Read Optimization(MRR)
    • 2 Block Nested-Loop(BNL) and Batched Key Access Joins(BKA)

Mysql优化(出自官方文档) - 第三篇

1 Multi-Range Read Optimization(MRR)

当使用二级索引进行多范围查找的时候,往往会导致对磁盘大量的随机访问,这就导致了局部性非常差,因此,Mysql在遇到这种场景的时候,首先会利用二级索引查找出所有的唯一索引,然后进行排序,在进行访问,这样子,就能大大的减少随机访问,众所周知,对于传统机械硬盘,顺序读的效率比随机读的效率要高很多。

需要注意的是:

  • MRR优化不支持创建在virtual generated columns上的二级索引,InnoDB支持virtual generated columns

  • 如果Mysql使用了这种优化,那么在EXPLAIN输出结果的Extra列会显示Using MRR
  • 如果查询的结果完全可以通过index产生(covering index, 覆盖索引:指部分列信息存储在索引里面)那么将不会使用MRR

2 Block Nested-Loop(BNL) and Batched Key Access Joins(BKA)

BKA算法可用于对joined table的索引访问和join buffer,BKA支持inner join, outer join, semijoin,以及nested outer joinBKA可以大大提高table scanning的性能。

  • Join Buffer Management for Block Nested-Loop and Batched Key Access Algorithms

    Mysql中,Join buffer分为regular bufferincremental bufferregular可以理解为我们通常理解的bufferincremental则是建立在regular的前提下,存储的部分列不是真正的数据,而是对上一个buffer的引用。假设有一个场景,三表join,t1 join t2 join t3,Mysql使用B1作为t1t2join临时结果,B2作为和t3的结果,那么通常来讲:

    • B1是一个regular bufferMysql会把t1t2的匹配结果存储在B1中,B1中只会存储匹配到的行,不会有任何多余的行,并且,如果某一列是NULLMysql也不会为该列分配任何空间。
    • B2是一个incremental bufferMysql会把t3中匹配的行存入到B2中,然后再把B1t1t2的链接存储到B2中,这样子就避免了数据无意义的拷贝操作。

    可以看到incremental buffer不是独立的,一般来讲,需要多个buffer,第一个buffer往往是regular buffer,后面的buffer才是incremental buffer

  • Block Nested-Loop Algorithm for Outer Joins and Semijoins

    当前的Mysql BNL算法已经支持outer joinsemi join了,当join操作发生在join buffer上的时候,通过将row放到buffer里面会同时放入一个match flag,表示join的匹配情况。

    如果Mysql使用了BNL,那么将会在EXPLAIN中体现如下,在Extra列,结果为: Using join buffer (Block Nested Loop) , 在Type列,为: ALL, index, 或者range.

  • Batched Key Access Joins

    BKA通常用在有索引访问的第二个join上,在BNL join算法中,当第一个join使用join buffer产生了多个列,此时BKA会把第一个join结果的多个key批量发给MRR(第一节)接口,MRR engine会使用更优化的方式进行table scan,可以大大提升效率。

    EXPLAIN中,如果使用BKA,那么Extra列的结果为:Using join buffer (Batched Key Access)type列的结果为:ref or eq_ref.

转载于:https://www.cnblogs.com/seancheer/p/11250284.html

Mysql优化(出自官方文档) - 第三篇相关推荐

  1. Unity 优化翻译官方文档(二) ------ 平台特定覆盖的纹理压缩格式

    官方文档 : https://docs.unity3d.com/Manual/class-TextureImporterOverride.html 虽然Unity支持许多常见的图像格式作为导入纹理的源 ...

  2. 【goldengate】官方文档笔记三 Oracle GoldenGate 实时报表

    这篇文档循序渐进的讲述了OGG在适时复制的几种配置方案.从最基本的配置开始讲起,逐渐加入新的进程,加入新的策略,配置也随之改变.下面从最基础的配置说起. 报表配置 一对一复制是OGG最基本的配置方案: ...

  3. Unity 优化翻译官方文档(三) ------ Animation Clips

    动画剪辑是Unity动画中最小的组成部分.它们代表了一个孤立的运动,如RunLeft.跳转或爬行,并且可以以各种方式进行操作和组合,以产生生动的最终结果(参见动画状态机.动画控制器控制器或混合树).您 ...

  4. ESP32 官方文档(三)分区表

    分区表分区表概述内置分区表创建自定义分区表名字字段类型字段子类型App 子类型数据子类型偏移量 & 大小标志生成二进制分区表MD5 校验和烧录分区表 分区表 概述 单个 ESP32 的 fla ...

  5. 看懂mysql执行计划--官方文档

    原文地址:https://dev.mysql.com/doc/refman/5.7/en/explain-output.html 9.8.2 EXPLAIN Output Format The EXP ...

  6. Unity优化翻译官方文档(六) ------ CPU Usage Profiler

    官网地址 : https://docs.unity3d.com/Manual/ProfilerCPU.html CPU使用分析器显示在您的游戏中花费的时间.当它被选中时,下窗格将显示所选帧的分层时间数 ...

  7. storm mysql trident_Apache Storm 官方文档 —— Trident 教程

    Trident 是 Storm 的一种高度抽象的实时计算模型,它可以将高吞吐量(每秒百万级)数据输入.有状态的流式处理与低延时的分布式查询无缝结合起来.如果你了解 Pig 或者 Cascading 这 ...

  8. voltDB官方文档第三章翻译

    序:本文章是自己再网上查看VoltDB相关资料的时候没有找到太好的学习资料,就前去官方网站上翻译了一部分,约束于个人英语能力有限.实际记录下来的翻译只有第三章. 注:文章翻译自voltDB官方提供的学 ...

  9. Flink官方文档学习(三):Standalone Cluster 集群部署

    参考:https://www.t9vg.com/archives/478 转载于:https://www.cnblogs.com/fanta2000/p/11227172.html

  10. [WebApp开发]基础教程-Google官方文档-第四篇

    文档内容 在Android Browser中使用控制台API 在WebView中使用控制台API 参考 调试 如果你是在为Android开发web应用,那么,你可以使用控制台(console)的Jav ...

最新文章

  1. 3.ELK 之elasticsearch CRUD
  2. Android Studio 点击运行总是debug
  3. Shell脚本之条件判断
  4. [Oracle 学习] Oracle中将查询语句执行结果导入文本文件
  5. 名校教授:把研究生扔到河里,游过去的就成为博士
  6. freebsd查询php5的版本,FreeBSD下查看各软件版本命令
  7. JAVA中.jsp模板文件AJAX异步请求 - 数据渲染问题
  8. linux定时器跑命令,linux下运行定时器(cron/centos/js脚本)
  9. Redmi Note10系列配LCD居中挖孔屏:5月26日正式发布
  10. php 上传word文件 源码,THINKPHP中word文档的上传与下载
  11. 爱搞事情:关于黑苹果Intel网卡驱动这件事
  12. oracle random函数用法,Oracle随机函数的用法
  13. 智能小车——循迹、避障小车(附详细代码)
  14. python2.4无线模块_使用nRF24L01模块进行无线射频通信
  15. 软件测试 | 状态迁移法
  16. R语言使用table1包绘制(生成)三线表、使用单变量分列构建三线表、编写自定义三线表结构(将因子变量细粒度化重新构建三线图)
  17. 前端周刊第56期:应接不暇的技术大会
  18. MATLAB数值分析学习笔记:线性最小二乘回归
  19. 抽35块树莓派新品单片机送给可爱的你们
  20. 2021数学建模国赛A题

热门文章

  1. Java多线程为什么使用while循环来调用wait方法
  2. oracle 循环块,Oracle语句块PL/SQL循环判断
  3. java使用btree_最新阿里、百度Java面试题(基础+框架+数据库+分布式+JVM+多线程)...
  4. MQTT服务器Mosquitto安装及使用
  5. php 打乱数组的顺序,php数组打乱顺序
  6. 图书馆学应掌握计算机知识,图书馆学专业基础知识点整理.doc
  7. canal与mysql高可用_canal 高可用介绍(4)
  8. 重庆计算机一级考试在线做,全国(重庆考区)计算机一级考试教程.doc
  9. 吞吐量越大越好吗_家用中央空调匹数越大越好吗?
  10. linux 内核挂起 ping,Linux内核安全详解 ping到死复活方法