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
列的结果为:ref
oreq_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 ...
随机推荐
- python字典的内建函数
In [70]: test=dict(x=1,y=2,z=3) In [71]: test Out[71]: {'x': 1, 'y': 2, 'z': 3} In [72]: a=['a','b', ...
- 【转载】Chrome使用自定义协议打开本地程序并运行IE打开网页
部分内容转载自: http://blog.sina.com.cn/s/blog_e2b8213a0102wqby.html 项目中遇到某需求:chorme要运行IE并打开网页.解决方案之一就是通过自定 ...
- Kong:Nginx支持的API Gateway管理解决方案
Kong的主要功能 Kong可灵活扩展:只要增添更多的服务器实例,它就能横向扩展,毫无问题,那样你可以支持更多流量,同时确保网络延迟很短. Kong可在任何地方运行:它可以部署在单个或多个数据中心环境 ...
- DNS查询命令
dig(domain information groper)是一个在类Unix命令行模式下查询DNS,包括NS记录,A记录,MX记录等相关信息的工具 一.简单介绍使用dig命令查询DNS的方法 dig ...
- Hive 学习之路(四)—— Hive 常用DDL操作
一.Database 1.1 查看数据列表 show databases; 1.2 使用数据库 USE database_name; 1.3 新建数据库 语法: CREATE (DATABASE|SC ...
- Programming In Lua 第六章
1, 2, 3,
- sql语句一些简单的用法
- python的比较关系运算符和逻辑运算符
比较运算符 运算符 描述 示例 == 检查两个操作数的值是否相等,如果是则条件变为真. 如a=2,b=2则(a == b) 为 true. != 检查两个操作数的值是否相等,如果值不相等,则条件变为真 ...
- mysql双机热备实现方案
一.概念 1.热备份和备份的区别 热备份指的是:High Available(HA)即高可用,而备份指的是Backup,数据备份的一种.这是两种不同的概念,应对的产品也是两种功能上完全不同的产品.热备 ...
- 小代介绍Spring Boot
想要获取更多文章可以访问我的博客 - 代码无止境. 小代很顺利的完成了陈BOSS交代给他搭建Spring Boot示例程序的任务.但是小代是一个乐于学习的程序员,他通过一番学习总结了一篇简单介绍Spr ...