zoukankan      html  css  js  c++  java
  • MySQL中的MRR和BKA

    MRR优化的目的就是减少磁盘的随机访问,InnoDB由于聚集索引的特性,如果查询使用辅助索引,并且用到表中非索引列,那么需要回表读取数据做后续处理,过于随机的回表会伴随大量的随机IO。

    而MRR的优化并不是通过辅助索引读取到数据就回表,而是通过范围扫描将数据存入read_rnd_buffer_size,然后对其按照primary key(Row ID)排序,最后使用排序好的数据进行顺序回表,因为Innodb 中叶子节点数据是按照primary key(row ID)进行排列的,这样就转换随机IO为顺序IO了,对于瓶颈为IO的SQL查询语句将带来极大的性能提升。

    BKA(Batched Key Access)结合MRR特性进行高效Join操作。
      1.将外循环表中相关列放入Join Buffer中。

      2.批量的将Key(索引键值)发送到MRR接口。

      3.MRR通过收到的key,根据其对应的primary key (row id )进行排序,然后再根据排序后的primary key(row id)顺序的读取聚集索引,得到需要的列数据。

      4.返回结果集给客户端。

  • 相关阅读:
    一个浏览器循环刷新网页的例子
    Ajax和JSON基础
    HTML-第三章构建模块小结
    HTML-元素属性
    入前端坑的第一天
    JZOJ 【2021.11.10NOIP提高组联考】
    LG P2633 Count on a tree
    JZOJ 7339.改试卷
    [CEOI2017] Building Bridges
    拉格朗日插值法
  • 原文地址:https://www.cnblogs.com/kate7/p/13456996.html
Copyright © 2011-2022 走看看