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访问连接)的更多相关文章

  1. MySQL 查询优化之 Block Nested-Loop 与 Batched Key Access Joins

    MySQL 查询优化之 Block Nested-Loop 与 Batched Key Access Joins 在MySQL中,可以使用批量密钥访问(BKA)连接算法,该算法使用对连接表的索引访问和 ...

  2. 解决:Using where; Using join buffer (Block Nested Loop)

    问题:left join 时候触发了全表查询导致很慢 解决:Using where; Using join buffer (Block Nested Loop) 总结:其实就是把left join 改 ...

  3. Block Nested-Loop 和 Batched Key Access

    官方文档:https://dev.mysql.com/doc/refman/5.7/en/bnl-bka-optimization.html BNL和BKA是MySQL 表关联的两种关联算法 比如t1 ...

  4. 44 答疑(三)--join的写法/Simple nested loop join的性能问题/Distinct和group by的性能/备库自增主键问题

    44 答疑(三) Join的写法 35节介绍了join执行顺序,加了straight_join,两个问题: --1 如果用left join,左边的表一定是驱动表吗 --2 如果两个表的join包含多 ...

  5. MySQL Batched Key Access

    Batched Key Access是MySQL 5.6 版本中的新特性,是一种用户提高表join性能的算法.[Batched Key Access]       对于多表join语句,当MySQL使 ...

  6. 1122MySQL性能优化之 Nested Loop Join和Block Nested-Loop Join(BNL)

    转自http://blog.itpub.net/22664653/viewspace-1692317/ 一 介绍  相信许多开发/DBA在使用MySQL的过程中,对于MySQL处理多表关联的方式或者说 ...

  7. MySQL Block Nested-Loop Join(BNL)

    5.5 版本之前,MySQL本身只支持一种表间关联方式,就是嵌套循环(Nested Loop).如果关联表的数据量很大,则join关联的执行时间会非常长.在5.5以后的版本中,MySQL通过引入BNL ...

  8. Sql优化(一) Merge Join vs. Hash Join vs. Nested Loop

    原创文章,首发自本人个人博客站点,转载请务必注明出自http://www.jasongj.com Nested Loop,Hash Join,Merge Join介绍 Nested Loop: 对于被 ...

  9. 多表连接的三种方式详解 HASH JOIN MERGE JOIN NESTED LOOP

    在多表联合查询的时候,如果我们查看它的执行计划,就会发现里面有多表之间的连接方式. 之前打算在sqlplus中用执行计划的,但是格式看起来有点乱,就用Toad 做了3个截图. 从3张图里我们看到了几点 ...

随机推荐

  1. Flask 框架 简介

    一.Flask介绍 Flask是一个基于Werkzeug,Jinja 2 轻量级的web开发框架, 使用Python开发, 上手简单. 二.安装Flask 三.第一个Flask程序 1.编写app.p ...

  2. CSS3 美女动画相框

    把下面的内容放到一个body内,运行看一看:) <style> *{ margin:0; padding:0;} .bg1{ background-image:-moz-linear-gr ...

  3. Effective Java 第三版——18. 组合优于继承

    Tips <Effective Java, Third Edition>一书英文版已经出版,这本书的第二版想必很多人都读过,号称Java四大名著之一,不过第二版2009年出版,到现在已经将 ...

  4. 【矩阵快速幂】bzoj1297 [SCOI2009]迷路

    1297: [SCOI2009]迷路 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 1407  Solved: 1007[Submit][Status ...

  5. 【数论·欧拉函数】SDOI2008仪仗队

    题目描述 作为体育委员,C君负责这次运动会仪仗队的训练.仪仗队是由学生组成的N * N的方阵,为了保证队伍在行进中整齐划一,C君会跟在仪仗队的左后方,根据其视线所及的学生人数来判断队伍是否整齐(如右图 ...

  6. office漏洞利用--获取shell

    环境: kali系统, windows系统 流程: 在kali系统生成利用文件, kali系统下监听本地端口, windows系统打开doc文件,即可中招 第一种利用方式, 适合测试用: 从git下载 ...

  7. (6综合实验)从零开始的嵌入式图像图像处理(PI+QT+OpenCV)实战演练

    从零开始的嵌入式图像图像处理(PI+QT+OpenCV)实战演练 1综述http://www.cnblogs.com/jsxyhelu/p/7907241.html2环境架设http://www.cn ...

  8. LeetCode第[16]题(Java):3Sum Closest 标签:Array

    题目难度:Medium 题目: Given an array S of n integers, find three integers in S such that the sum is closes ...

  9. solrCloud设置Tomcat jvm内存解决内存溢出的问题

    几乎已经搜遍了整个网络,没有找到一篇解决设置solr在Tomcat下设置虚拟机内存的文章.   因为之前一直是在Tomcat中设置zkhost参数,在加上jvm参数后会无法启动,添加其他参数也没有生效 ...

  10. html的布局demo

    header section footer 都是水平,垂直居中,文本内容居中 section的高度是根据文本内容自适应的,footer会一直在最下面 <!DOCTYPE html> < ...