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. PCoA主坐标分析

    来源:http://blog.sina.com.cn/s/blog_670445240101nlss.html 1   背景介绍 这是一种排序方法.假设我们对N个样方有了衡量它们之间差异即距离的数据, ...

  2. 关于微信小程序,一些想法

    不负众望,小程序终于在昨天1月9日正式上线,从凌晨微信公开课发布了微信<一月九日,一年之约>到现在,整整一天的时间,朋友圈.自媒体平台都在不断的发着关于小程序的各种文章,"APP ...

  3. git上传文件到github

     一.git之上传代码到github. 安装git,这个就不说了,很多帖子都有详细说明.  二.新建仓库,GitHub上的,首先申请账号.  三.本地选择地方新建本地仓库. 建完本地仓库文件夹,在本地 ...

  4. MySQL优化一 简绍

    优化方面: 存储层:数据表”存储引擎”选取.字段类型选取.逆范式(3范式) 设计层:索引.分区/分表 架构层:分布式部署(主从模式/共享) sql语句层:结果一样的情况下,要选择效率高.速度快.节省资 ...

  5. [SharePoint]解决用户权限被无缘无故自动删除的问题

    前几天在维护公司内网的时候接到了一个case, 说是某个用户的权限无缘无故的就会被SharePoint自动去掉. 刚开始我还不愿意相信这个用户的说法,认为可能是权限赋的方法不对,有可能是被其他人误删了 ...

  6. ionic2 开始第一个App(二)

    安装App指令:ionic start 你的项目文件夹名称 tabs 安装指令如: ionic start myApp tabs 安装时间有点长,耐心等待~ 进入myApp文件夹指令:cd myApp ...

  7. 自定义注解,andjdk提供的元注解

    @Target(ElementType.METHOD) @Retention(RetentionPolicy.RUNTIME) @Documented public @interface FruitN ...

  8. (๑•̀ㅂ•́)و✧随笔总目录ヾ(≧▽≦*)o

    SSM整合进阶篇 日常手记 开源博客My Blog系列 短信接口攻击事件 读书笔记 SSM整合优化篇 SSM整合基础篇 SSM整合进阶篇 Spring+SpringMVC+MyBatis+easyUI ...

  9. Nexus 6P 解锁+TWRP+CM

    // 这是一篇导入进来的旧博客,可能有时效性问题. 1. 需要用到的文件:Google USB驱动:adb和fastboot工具二进制文件(如果解锁时提示命令无效说明版本过低,需下载使用支持nexus ...

  10. webAPI+angularJS文件上传和下载

    开发框架 前端 angularJS1.6 下载和保存文件FileSaver:https://github.com/eligrey/FileSaver.js/ 后端 .net WebAPI 1 导入Ex ...