MySQL Block Nested Loop and Batched Key Access Joins(块嵌套循环和批量Key访问连接)
2015-05-26 11:29
399 查看
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的行数据)
相关文章推荐
- mysql5.7官网直译SQL语句优化--块式嵌套循环和批量key访问连接
- 【MYSQL系列-优化4】——阻止嵌套循环和批量密钥访问连接
- Hibernate4使用映射文件hbm.cml连接访问MySQL的小例子
- tomcat与mysql连接隔段时间没有访问总是自动断开解决方法
- mysql设置指定ip远程访问连接实例
- ubuntu10.10下mysql远程连接和访问慢的解决方法
- 使用C语言访问MySQL数据 —— 连接和错误处理
- ubuntu10.10下mysql远程连接和访问慢的解决方法
- 开启MySQL远程访问权限 允许远程连接
- 解决Mysql连接池被关闭 ,hibernate尝试连接不能连接的问题。 (默认mysql连接池可以访问的时间为8小时,如果超过8小时没有连接,mysql会自动关闭连接池。
- mysql Error 1130 远程连接访问 问题的解决方案
- MySQL远程访问权限,允许远程连接的开启
- .net 使用管道方式访问mySQL的连接字符串
- 如何让mysql数据库允许被远程连接访问?就是从其他的电脑连接我的电脑上的mysql
- Entity Framework连接MySQL时:由于出现以下异常,无法生成模型:“表“TableDetails”中列“IsPrimaryKey”的值为DBNull.
- mysql的bind-address设置为127.0.0.1,通过localhost连接访问不了
- 批量杀死MySQL连接的四种方法详解
- 远程连接MySQL,防火墙阻止访问,解决方法
- ubuntu下mysql远程连接和访问慢的解决方法
- 数据库操作-表合并-Python连接Mysql-批量修改列属性-csv读入Python