`

mysql 5.7中的MBR和BKA算法

 
阅读更多

  一、什么是MRR
MMR全称是Multi-Range Read,是MYSQL5.6优化器的一个新特性,在MariaDB5.5也有这个特性。优化的功能在使用二级索引做范围扫描的过程中减少磁盘随机IO和减少主键索引的访问次数。将随机IO转换为顺序IO

二、MRR和没有MRR的区别

给出一个简单的例子,在innodb表执行下面的查询:

SELECT non_key_column FROM tbl WHERE key_column=x
在没有MRR的情况下,它是这样得到结果的:

1.  select key_column, pk_column from tb where key_column=x order  by key_column ---> 假设这个结果集是t
2.  for each row in t ;   select non_key_column from tb where pk_column = pk_column_value。(在oracle里第2步叫回表)
在有MRR的情况下,它是这样执行的:
1.  select key_column, pk_column from tb where key_column = x  order by key_column ---> 假设这个结果集是t
2.  将结果集t放在buffer里面(直到buffer满了),然后对结果集t按照pk_column排序      ---> 假设排序好的结果集是t_sort
3.  select non_key_column fromtb where pk_column in (select pk_column from t_sort)
两者的区别主要是两点:

1. 没有MRR的情况下,随机IO增加,因为从二级索引里面得到的索引元组是有序,但是他们在主键索引里面却是无序的,所以每次去主键索引里面得到non_key_column的时候都是随机IO。(如果索引覆盖,那也就没必要利用MRR的特性了,直接从索引里面得到所有数据)

2. 没有MRR的情况下,访问主键索引的次数增加。没有MRR的情况下,二级索引里面得到多少行,那么就要去访问多少次主键索引(也不能完全这样说,因为mysql实现了BNL),而有了MRR的时候,次数就大约减少为之前次数t/buffer_size。


二 BKA
  Batched Key Access (BKA)  提高表join性能的算法。当被join的表能够使用索引时,就先排好顺序,然后再去检索被join的表,听起来和MRR类似,实际上MRR也可以想象成二级索引和 primary key的join
如果被Join的表上没有索引,则使用老版本的BNL策略(BLOCK Nested-loop)
BKA原理

对于多表join语句,当MySQL使用索引访问第二个join表的时候,使用一个join buffer来收集第一个操作对象生成的相关列值。BKA构建好key后,批量传给引擎层做索引查找。key是通过MRR接口提交给引擎的(mrr目的是较为顺序)MRR使得查询更有效率。

大致的过程如下:


BKA使用join buffer保存由join的第一个操作产生的符合条件的数据
然后BKA算法构建key来访问被连接的表,并批量使用MRR接口提交keys到数据库存储引擎去查找查找。
提交keys之后,MRR使用最佳的方式来获取行并反馈给BKA
BNL和BKA都是批量的提交一部分行给被join的表,从而减少访问的次数,那么它们有什么区别呢?


BNL比BKA出现的早,BKA直到5.6才出现,而NBL至少在5.1里面就存在。
BNL主要用于当被join的表上无索引
BKA主要是指在被join表上有索引可以利用,那么就在行提交给被join的表之前,对这些行按照索引字段进行排序,因此减少了随机IO,排序这才是两者最大的区别,但是如果被join的表没用索引呢?那就使用NBL
BKA和BNL标识

Using join buffer (Batched Key Access)和Using join buffer (Block Nested Loop)
相关参数

BAK使用了MRR,要想使用BAK必须打开MRR功能,而MRR基于mrr_cost_based的成本估算并不能保证总是使用MRR,官方推荐设置mrr_cost_based=off来总是开启MRR功能。打开BAK功能(BAK默认OFF):
SET optimizer_switch='mrr=on,mrr_cost_based=off,batched_key_access=on';
复制代码
BKA使用join buffer size来确定buffer的大小,buffer越大,访问被join的表/内部表就越顺序。

BNL默认是开启的,设置BNL相关参数:
SET optimizer_switch=’block_nested_loop’
复制代码
支持inner join, outer join, semi-join operations,including nested outer joins
BKA主要适用于join的表上有索引可利用,无索引只能使用BNL


三  设置
    SET global optimizer_switch='mrr=on,mrr_cost_based=off,batched_key_access=on';
分享到:
评论

相关推荐

    【mysql】关于ICP、MRR、BKA等特性1

    第一步 先根据where条件中的辅助索引获取辅助索引与主键的集合,结果 第二步 通过第一步获取的主键来获取对应的值 第一步 先根据where条件中的辅助索引获取

    BKA和ATP处理对龙眼果实采后贮藏效果.zip

    BKA和ATP处理对龙眼果实采后贮藏效果.zip

    BKA和ATP处理对龙眼果实采后贮藏效果.doc

    BKA和ATP处理对龙眼果实采后贮藏效果.doc

    ris-bka:用于请求 ris.bka.gv.at 的 Javascript 库

    RIS-BKA用法$ npm install // In your project import the 'ris-bka' modulevar RisBka = require ( 'ris-bka' ) ;// Use this object to execute methods (listed below)方法getVersion: RisBka.getVersion(cbOk, ...

    光学实时扫描和墨水指纹图像质量评估工具_C++_代码_下载

    因此,NFIQ 2 的开发始于 2011 年,由 NIST 与德国联邦信息安全办公室 (BSI) 和联邦刑事警察局 (BKA)以及研发实体MITRE、 Fraunhofer IGD、Hochschule Darmstadt (h_da )和Secunet。 NFIQ 2 在 [0-100] 范围内提供...

    论文研究 - Enugu国家骨科医院糖尿病截肢者的足部护理知识评估

    24名男性中有24名(57.1%),而女性则有18名(42.9%)。 平均年龄为58.3岁(SD = 12.0)。 15人中,有15人(35.7%)拥有中学,15人(35.7%)拥有高等教育,而3人(7.1%)和9人(21.4%)分别没有学历和初等...

    交易量

    标签版本Kanjur/ , Tanjur/和Tantra/文件夹的xml文件中使用的标签是: <rkts> (分别为rktst和rktsg ),指示文本是内核中文本的体现/表达。 例如<rkts>1在Kanjur/derge.xml指示在德格版文字是用ID的文本的表现1在...

    jsp实现购物程序

    下面是我用JSP和数据库做的购物车的源程序:注意:1、重新计费部分还没有做好,大家自己动手吧!2、下一版本将用session做。//shop_cart.jsp<%@ page contentType=text/html;charset=gb2312%><%@ page...

    用JSP和数据库做的购物车的源程序

    //页数和商品类型参数,可以在“继续购物”时返回到上次购物的页面 if (request.getParameter("curpage")==null){ curpage=1; }else{ curpage=java.lang.Integer.parseInt(request.getParameter("curpage")); } //...

    nfiq2_report.pdf

    and Federal Office for Information Security (BSI) and Federal Criminal Police Office (BKA) in Germany as well as research and development entities, MITRE, Fraunhofer IGD, Hochschule Darmstadt (HAD) ...

    购物车的源程序

    @ page language=”java” import=”java.sql.*” %> id=”bka” scope u201dpage” class=”shop.bka” /><%String product_type;String action;int product_id;int curpage;//商品类型i

    domain_seizure:准备使用适合移动设备的域名扣押页面

    BKA / Generalstaatsanwaltschaft法兰克福缉获主页 由分叉。 特征 移动优先:自动调整屏幕尺寸 辅助功能:与屏幕阅读器和盲文显示器完全兼容。 指示 抓住隐藏的服务 将index.html和banner.jpg复制到webroot LKA...

    gocurves:go的隐椭圆包的椭圆曲线

    曲线 Go的crypto/elliptic软件包的椭圆曲线。 crypto/elliptic附加椭圆曲线。 使用*elliptic.CurveParams实现曲线。... 在Brainpool曲线中,由于crypto / elliptic的限制,仅实现brainpoolP * t1变

    具有连续变量的脉冲偏差分方程解的振动性 (2010年)

    考虑一类具有连续变量的...y≥yo-τ,x≠k, A(xk +τ,y) +A(xk,y +τ) -A(xk,y) =bkA(xk,y), ∨y∈ [Yo-τ,∞),k∈N(1).其中P(x,y)≥0是[xo,∞)X[yo-τ,∞)上的非负连续函数,τ>0,bk是常数,r和l是正整数,0≤ xo

    ESL-CN:统计学习的要素(ESL)的翻译,代码实现及其习题解答

    习题解答代码实现 ,或者可以查看:包括交叉验证(cv)和自助法(bootstrap) : ,:文献统计小伙子AOS 日本航空航天局JRSS BKA 百分比3 1个0 3 0 4/14 4 0 0 0 0 0/7 5 0 0 0 1个1/11 7 4 6 2 0 12/23 8 1个4 1个0...

Global site tag (gtag.js) - Google Analytics