Mysql优化(出自官方文档) - 第三篇
目录
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 join,BKA可以大大提高table scanning的性能。
Join Buffer Management for Block Nested-Loop and Batched Key Access Algorithms
在
Mysql中,Join buffer分为regular buffer和incremental buffer,regular可以理解为我们通常理解的buffer,incremental则是建立在regular的前提下,存储的部分列不是真正的数据,而是对上一个buffer的引用。假设有一个场景,三表join,t1 join t2 join t3,Mysql使用B1作为t1和t2的join临时结果,B2作为和t3的结果,那么通常来讲:B1是一个regular buffer,Mysql会把t1和t2的匹配结果存储在B1中,B1中只会存储匹配到的行,不会有任何多余的行,并且,如果某一列是NULL,Mysql也不会为该列分配任何空间。B2是一个incremental buffer,Mysql会把t3中匹配的行存入到B2中,然后再把B1中t1和t2的链接存储到B2中,这样子就避免了数据无意义的拷贝操作。
可以看到
incremental buffer不是独立的,一般来讲,需要多个buffer,第一个buffer往往是regular buffer,后面的buffer才是incremental buffer。Block Nested-Loop Algorithm for Outer Joins and Semijoins
当前的
Mysql BNL算法已经支持outer join和semi 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列的结果为:reforeq_ref.
Mysql优化(出自官方文档) - 第三篇的更多相关文章
- Mysql优化(出自官方文档) - 第九篇(优化数据库结构篇)
目录 Mysql优化(出自官方文档) - 第九篇(优化数据库结构篇) 1 Optimizing Data Size 2 Optimizing MySQL Data Types 3 Optimizing ...
- Mysql优化(出自官方文档) - 第二篇
Mysql优化(出自官方文档) - 第二篇 目录 Mysql优化(出自官方文档) - 第二篇 1 关于Nested Loop Join的相关知识 1.1 相关概念和算法 1.2 一些优化 1 关于Ne ...
- Mysql优化(出自官方文档) - 第一篇(SQL优化系列)
Mysql优化(出自官方文档) - 第一篇 目录 Mysql优化(出自官方文档) - 第一篇 1 WHERE Clause Optimization 2 Range Optimization Skip ...
- Mysql优化(出自官方文档) - 第五篇
目录 Mysql优化(出自官方文档) - 第五篇 1 GROUP BY Optimization 2 DISTINCT Optimization 3 LIMIT Query Optimization ...
- Mysql优化(出自官方文档) - 第七篇
Mysql优化(出自官方文档) - 第七篇 目录 Mysql优化(出自官方文档) - 第七篇 Optimizing Data Change Statements 1 Optimizing INSERT ...
- Mysql优化(出自官方文档) - 第八篇(索引优化系列)
目录 Mysql优化(出自官方文档) - 第八篇(索引优化系列) Optimization and Indexes 1 Foreign Key Optimization 2 Column Indexe ...
- Mysql优化(出自官方文档) - 第十二篇(优化锁操作篇)
Mysql优化(出自官方文档) - 第十二篇(优化锁操作篇) 目录 Mysql优化(出自官方文档) - 第十二篇(优化锁操作篇) 1 Internal Locking Methods Row-Leve ...
- Mysql优化(出自官方文档) - 第十篇(优化InnoDB表篇)
Mysql优化(出自官方文档) - 第十篇(优化InnoDB表篇) 目录 Mysql优化(出自官方文档) - 第十篇(优化InnoDB表篇) 1 Optimizing Storage Layout f ...
- Mysql优化(出自官方文档) - 第六篇
Mysql优化(出自官方文档) - 第六篇 目录 Mysql优化(出自官方文档) - 第六篇 Optimizing Subqueries, Derived Tables, View Reference ...
随机推荐
- 向HashMap中添加1000个元素,设置new HashMap()值为多少合适?
在已知元素容量的情况下,为了尽量减少碰撞增加查询效率,应该尽量选择较大数的同时避免资源浪费. HashMap底层通过hash值来计算索引位置的源码: 1.重新计算hash值 static final ...
- Liunx 安装 Nessus
Liunx 安装 Nessus 啥子是Nessus 它是一款系统漏洞扫描与分析软件,可以扫描服务器存在哪些漏洞,页面简介美观,非常Nice. 获取激活码 首先访问如下网站 https://www. ...
- 计算广告之CTR预测--PNN模型
论文为:Product-based Neural Networks for User Response Prediction 1.原理 给大家举例一个直观的场景:比如现在有一个凤凰网站,网站上面有一个 ...
- 超级实用的表格树控件--QtTreePropertyBrowser
目录 一.源码下载 二.代码编译 1.intersect函数替换为intersected 2.移除UnicodeUTF8 3.QtGui模块拆分 4.Q_TYPENAME错误 5.qVariantVa ...
- KVM虚拟机迁移至VMware
1.将kvm下虚拟机关机: [root@localhost ~]# virsh list --all Id Name State ----------------------------------- ...
- ES6_09_Generator函数
Generator函数: 概念: 1.ES6提供的解决异步编程的方案之一 2.Generator函数是一个状态机,内部封装了不同状态的数据, 3.用来生成遍历器对象 4.可暂停函数(惰性求值), yi ...
- SPOJ INTSUB - Interesting Subset(数学)
http://www.spoj.com/problems/INTSUB/en/ 题意:给定一个集合,该集合由1,2,3....2n组成,n是一个整数.问该集合中有趣子集的数目,答案mod1e9+7. ...
- 充气娃娃什么感觉?Python告诉你
上期为大家介绍了requests库的基本信息以及使用requests库爬取某东的商品页,收到了很多同学的反馈说期待猪哥的更新,猪哥感到非常开心,今天就带大家来玩一把刺激的! 一.需求背景 在实际开发过 ...
- Dijkstra算法与堆(C++)
Dijkstra算法用于解决单源最短路径问题,通过逐个收录顶点来确保得到以收录顶点的路径长度为最短. 图片来自陈越姥姥的数据结构课程:https://mooc.study.163.com/l ...
- java接口自动化(一) - 接口自动化测试整体认知 - 开山篇(超详解)
简介 了解什么是接口和为什么要做接口测试.并且知道接口自动化测试应该学习哪些技术以及接口自动化测试的落地过程.其实这些基本上在python接口自动化的文章中已经详细的介绍过了,不清楚的可以过去看看.了 ...