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 ...
随机推荐
- 使用Func<T1, T2, TResult> 委托返回匿名对象
Func<T1, T2, TResult> 委托 封装一个具有两个参数并返回 TResult 参数指定的类型值的方法. 语法 public delegate TResult Func< ...
- Ionic Framework 4 介绍
Ionic Framework 4是一个开源UI工具包,用于使用Web技术(HTML,CSS和JavaScript)构建高性能的高质量移动和桌面应用程序.Ionic Framework专注于前端用户体 ...
- Spring AOP APIS
1:Pointcut API in Spring (1):切点接口定义 org.springframework.aop.Pointcut接口是中心接口.用来将Advice(通知)定位到特定的类和方法. ...
- Linux上read命令的使用
一:read倾听是一种美德 1.倾听键盘的输入并保存到变量中 例如:#! /bin/bash echo "please inpu ...
- Docker环境下的前后端分离项目部署与运维(十一)Docker Swarm技术
Docker Swarm技术 docker swarm技术(之前的docker集群都是在 一个虚拟主机上的,但是如果这个主机挂掉了over了,docker技术就是多个虚拟主机形成一个集群) Swarm ...
- springboot读取本地项目文件
在读取springBoot+gradle构建的项目时,如果使用传统的FileInputStream读取文件流或者ResourceUtils工具类的方式 File file= ResourceUtils ...
- ABP开发框架前后端开发系列---(7)系统审计日志和登录日志的管理
我们了解ABP框架内部自动记录审计日志和登录日志的,但是这些信息只是在相关的内部接口里面进行记录,并没有一个管理界面供我们了解,但是其系统数据库记录了这些数据信息,我们可以为它们设计一个查看和导出这些 ...
- Android项目开发之--------地铁时光机(一,搭建主框架)
一:先看一下框架搭建后的效果图 , 二:框架结构 (1)底部导航栏采用的是: MainActivity(主框架), MsgFragment(首页), HistoryFragment(历史清单 ...
- spring 5.x 系列第15篇 —— 整合dubbo (xml配置方式)
文章目录 一. 项目结构说明 二.项目依赖 三.公共模块(dubbo-common) 四. 服务提供者(dubbo-provider) 4.1 productService是服务的提供者( 商品数据用 ...
- 系统学习 Java IO (十六)----这么多类,应该用哪个?
目录:系统学习 Java IO---- 目录,概览 Java IO目的和功能 Java IO 包含 InputStream,OutputStream,Reader 和 Writer 类的许多子类. 原 ...