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张图里我们看到了几点 ...
随机推荐
- ABP架构学习系列三:手工搭建ABP框架
由于公司的项目才接触到ABP这个框架,当时就觉得高大上,什么IOC.AOP.ddd各种专业词汇让人激情 澎湃,但在使用过程中碰到了许多坑,可能也许是没有去看源码导致的,但工作确实没有那么多时间让人去慢 ...
- 利用lsof恢复进程占用的文件
说明:经常会遇到这种情况,没有使用正确的方式清理进程占用的文件,比如日志.导致空间并没有释放.也有的时候需要恢复进程占用的文件. 解决方式 lsof |grep del # 找出自己要恢复的文件名称. ...
- java的static关键字 – Break易站
本文内容来自:java的static关键字 – Break易站 (原文网站阅读体验更好) 通过static关键字可以满足两方面的需要.一种情形是,只想为某特定域分配单一存储空间,而不去考虑究竟要创建多 ...
- css中的 nav ul li ul 与 nav>ul>li 这两种写法的区别
<nav> <ul id="a"> <li>a1</li> <li>a2</li> <li>a3 ...
- 【Bootstrap简单用法】
一.下载及使用 参考网站:http://www.bootcss.com/ 1.使用 BootCDN 提供的免费 CDN 加速服务(同时支持 http 和 https 协议) <!-- 最新版本的 ...
- Android异常分析(转)
关于异常 异常? 异常就是一种程序中没有预料到的问题,既然是没有预料到的,就可能不在原有逻辑处理范围内,脱离了代码控制,软件可能会出现各种奇怪的现象.比如:android系统常见异常现象有应用无响应. ...
- centos下安装最新版本git(通过master分支下载最新版)
centos6.7下安装最新版本git 本文参考:http://www.01happy.com/centos-install-latest-git/ 按照原博主所提供的思路安装可能会出现下列问题 解决 ...
- python实现类jq的json路径过滤
开发过程中访问接口时经常用到jq来过滤json,用着觉得不是很爽,于是自己搞一个舒服的 ^_^ 先说需求: 输入:参数1:被过滤对象(json.dict.list), 参数2:过滤路径 输出:过滤结果 ...
- Zabbix实战-简易教程--动作(Actions)--自动发现
一.概述 Zabbix提供了有效和非常灵活的网络自动发现功能. 设置网络发现后你可以: 加快Zabbix部署(自动添加主机.添加模板) 简化管理(自动删除主机.删除模板.禁用主机) 无需过多管理就能在 ...
- 爬取网页内容java
下面介绍的这个方法只是作为抛砖引玉:根据网页URL就可以抓取其中的内容 /** * @title getHtmlResourceByUrl * @param url 网址 * @param encod ...