博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Block Nested-Loop 和 Batched Key Access
阅读量:6930 次
发布时间:2019-06-27

本文共 807 字,大约阅读时间需要 2 分钟。

官方文档:

BNL和BKA是MySQL 表关联的两种关联算法

比如t1、t2、t3关联查询且查询顺序和关联顺序一致,MySQL处理join的过程一般是

t1和t2的关联的结果集放入join buffer B1,分配到join buffer时,varchar类型字段的长度是最小的分配单元,所以varchar也指定合适长度,以免浪费内存。

B1中的结果集再和t3进行匹配,将匹配的结果集放入join buffer B2,B2是增量的buffer,因为B2中存放的是t3匹配的column和与之匹配的row的位置链接

当内表的查询类型是all、index或range的时候才会走BNL,explain输出的extra是Using join buffer (Block Nested Loop)

BAK和BNL的别在于所有的右表和左结果集匹配时走辅助索引。BAK会一次性提交B1中与t2关联的column到Multi-Range Read (MRR)接口与t2的索引进行

匹配,然后通过MRR返回匹配的按主键排序的key,从而减少回表时产生的随机I/O。join_buffer_size的大小决定BAK每次批处理提交给MRR的key的大小,

适当增大join_buffer_size 的大小可以有效的提高关联查询的性能。

内表的查询类型是ref或eq_ref时join会采用BAK,explain的extra输出为Using join buffer (Batched Key Access)

BNL默认开启,而BKA默认时关闭的,如果要开启BAK,需要一起开始MRR

mysql> SET optimizer_switch='mrr=on,mrr_cost_based=off,batched_key_access=on';

转载于:https://www.cnblogs.com/Bccd/p/9425958.html

你可能感兴趣的文章
linux搭建https服务器(apache)
查看>>
XML 测验
查看>>
HTTP 错误405.0 - Method Not Allowed
查看>>
MIFARE系列7《安全》
查看>>
Qt工程转化为Vs工程
查看>>
剑指offer 例题
查看>>
Caffe学习系列(2):数据层及参数
查看>>
POJ1300(欧拉回路)
查看>>
Windows下cpu使用的监控
查看>>
怎样将baidu地图中的baidu logo 去掉
查看>>
WebService学习总结——调用第三方提供的webService服务
查看>>
设置vs2008代码区的背景色
查看>>
ServerSocket 默认邦定IP
查看>>
谈谈前端『新』技术
查看>>
(白书训练计划)UVa 120 Stacks of Flapjacks(构造法)
查看>>
删除反复字符
查看>>
解决Win10服务主机本地系统网络受限
查看>>
【POJ 3176】Cow Bowling(DP)
查看>>
SQL 存储过程入门(事务)(四)
查看>>
培训课程大纲
查看>>