MySQL Block Nested Loop and Batched Key Access Joins(块嵌套循环和批量Key访问连接)
Block Nested-Loop and Batched Key Access Joins
Batched Key Access (BKA) Join算法通过index和join buffer访问joined表,BKA算法支持inner join,outer join 和semi join操作,包括嵌套的outer join,BKA的好处包括提高join性能(由于更有效率的table scan),同时,前文的Block Nested loop(BNL)join 算法被扩展也支持这些join类型。
Block Nested-Loop
MYSQL server提供了join buffer来执行没有index的内链接,外连接,半连接的内表访问子查询,并且当通过index来访问内表是join buffer更有效率。
当存储“感兴趣的行列值”时,join buffer管理器更有效率的利用join buffer空间,如果行列值为null,join buffer 不会为之分配空间,并且最小化分配空间给varchar类型的数据;
管理器支持两种类型的buffer,常规的和增量式的,e.g.join buffer b1 应用在表t1和表t2的join,该join结果和表t3用b2做Join;
1:常规的join buffer包含每个join操作数(table)的列,如果b2是一个常规的join buffer, join buffer b1中的每一行和 table t2相对应匹配行的组成的新行数据(包含t2刚兴趣的列)全部被压入b2之中;
2:增量式 join buffer 只包含做join操作的内表中的数据行,因此,它作为第一个join buffer 的行的增量。如果b2是一个增量式的join buffer ,它包含内表刚兴趣的行列数据和 join
buffer b1对应行数据的一个引用;
增量式 join buffers总是关于前面一个join操作的join buffer的相关增量,所以前面一个join 操作的join buffer往往是 常规 join buffer;join buffer b1用于table t1 和t2连接,其必须为常规join buffer;
增量式join buffer 仅仅包含joined table(内表)的刚兴趣的列,这些列被指定一个前一个join操作产生的table的行引用(也仅含有感兴趣的列),增量式join buffer中的一些数据行引用那些存储在前一个join buffer中的同一行数据(match success的);
增量式join buffer保证小频率的从前一个join buffer中copy 数据,这节省了join buffer的空间,因为在一般情况下,前一个join操作产生的行可能被该join操作的joined table的多行数据匹配,没必要多次拷贝前一个join buffer的同一行数据,同时也减少处理时间。
Batched Key Access Join
当通过index来访问做join操作的joined table时,批量key访问连接被使用,和BNL算法一样,BKA join算法应用join buffer来存放join操作第一个表中感兴趣的行列值,
然后BKA算法为join buffer中的所有行创建index来访问second table,并且批量的提交这些indexes 给数据库引擎来查找这些index,这些index通过MRR(mutil range read)接口提交,
MRR引擎执行index查找,获取得到的数据,然后执行BKA匹配算法获得匹配行数据(refenece 前一JoinBufferd的行数据)
MySQL Block Nested Loop and Batched Key Access Joins(块嵌套循环和批量Key访问连接)的更多相关文章
- MySQL 查询优化之 Block Nested-Loop 与 Batched Key Access Joins
MySQL 查询优化之 Block Nested-Loop 与 Batched Key Access Joins 在MySQL中,可以使用批量密钥访问(BKA)连接算法,该算法使用对连接表的索引访问和 ...
- 解决:Using where; Using join buffer (Block Nested Loop)
问题:left join 时候触发了全表查询导致很慢 解决:Using where; Using join buffer (Block Nested Loop) 总结:其实就是把left join 改 ...
- Block Nested-Loop 和 Batched Key Access
官方文档:https://dev.mysql.com/doc/refman/5.7/en/bnl-bka-optimization.html BNL和BKA是MySQL 表关联的两种关联算法 比如t1 ...
- 44 答疑(三)--join的写法/Simple nested loop join的性能问题/Distinct和group by的性能/备库自增主键问题
44 答疑(三) Join的写法 35节介绍了join执行顺序,加了straight_join,两个问题: --1 如果用left join,左边的表一定是驱动表吗 --2 如果两个表的join包含多 ...
- MySQL Batched Key Access
Batched Key Access是MySQL 5.6 版本中的新特性,是一种用户提高表join性能的算法.[Batched Key Access] 对于多表join语句,当MySQL使 ...
- 1122MySQL性能优化之 Nested Loop Join和Block Nested-Loop Join(BNL)
转自http://blog.itpub.net/22664653/viewspace-1692317/ 一 介绍 相信许多开发/DBA在使用MySQL的过程中,对于MySQL处理多表关联的方式或者说 ...
- MySQL Block Nested-Loop Join(BNL)
5.5 版本之前,MySQL本身只支持一种表间关联方式,就是嵌套循环(Nested Loop).如果关联表的数据量很大,则join关联的执行时间会非常长.在5.5以后的版本中,MySQL通过引入BNL ...
- Sql优化(一) Merge Join vs. Hash Join vs. Nested Loop
原创文章,首发自本人个人博客站点,转载请务必注明出自http://www.jasongj.com Nested Loop,Hash Join,Merge Join介绍 Nested Loop: 对于被 ...
- 多表连接的三种方式详解 HASH JOIN MERGE JOIN NESTED LOOP
在多表联合查询的时候,如果我们查看它的执行计划,就会发现里面有多表之间的连接方式. 之前打算在sqlplus中用执行计划的,但是格式看起来有点乱,就用Toad 做了3个截图. 从3张图里我们看到了几点 ...
随机推荐
- 吓尿了,mac下bash出了问题
由于个人的脑残行为,使用homebrew安装bash后,使用chsh命令将其改成brew安装的特定版本的bash,结果上次brew更新bash之后,就彻底用不了shell了... 无奈只能添加新的管理 ...
- 转:JAVA常见错误处理方法 和 JVM内存结构
OutOfMemoryError在开发过程中是司空见惯的,遇到这个错误,新手程序员都知道从两个方面入手来解决:一是排查程序是否有BUG导致内存泄漏:二是调整JVM启动参数增大内存.OutOfMemor ...
- MyBatis单个多个参数传递
一.传入单个参数: public List<XXBean> getXXBeanList(String xxCode); <select id="getXXXBeanList ...
- 【Java框架型项目从入门到装逼】第七节 - 学生管理系统项目搭建
本次的教程是打算用Spring,SpringMVC以及传统的jdbc技术来制作一个简单的增删改查项目,对用户信息进行增删改查,就这么简单. 1.新建项目 首先,打开eclipse,新建一个web项目. ...
- icon图标和文字整体居中在button按钮
icon图标和文字整体居中在button按钮 icon图标和文字整体居中 一般我们常做的button按钮是文字居中 现在这个需要icon图标和文字一起居中在背景色 <a href="# ...
- tomcat配置https协议
tomcat配置https协议 1.找到本地jdk底下的bin目录,bin目录底下存在文件keytool.exe(在bin目录下空白处,按住shift右击,打开命令窗口,如下图) 2.在cmd的命令窗 ...
- python 打印几行空行、 打印不换行
2.x版本中使用print '\n' * n #n为行数 3.x版本中使用print('\n' * n) #n为行数 print 'Hello', :不会换行.[加上逗号(,)]
- python 单下划线/双下划线使用总结
文章转自:http://blog.csdn.net/pfm685757/article/details/45918575
- 一个大四毕业生想对自学Android的大学生说一些话
本人大四,经历了秋招和春招,秋招拿了华为的android offer,春招是拿的java后台开发的offer,一路走来,感慨很多,有一些话想对在自学Android的大学生说.本文只是帮助像我一样的大学 ...
- hibernate使用注解配置索引
添加普通索引 @Table(name="t_token", indexes={@Index(name="token_strIndex", columnList= ...