• 企业400电话
  • 微网小程序
  • AI电话机器人
  • 电商代运营
  • 全 部 栏 目

    企业400电话 网络优化推广 AI电话机器人 呼叫中心 网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    MySQL InnoDB MRR优化指南

    前言

    MRR 是 Multi-Range Read 的简写,目的是减少磁盘随机访问,将随机访问转化为较为顺序的访问。适用于 range/ref/eq_ref 类型的查询。

    实现原理:

    1、在二级索引查找后,根据得到的主键到聚簇索引找出需要的数据。

    2、二级索引查找得到的主键的顺序是不确定的,因为二级索引的顺序与聚簇索引的顺序不一定一致;

    3、如果没有 MRR,那么在聚簇索引查找时就可能出现乱序读取数据页,这对于机械硬盘是及其不友好的。

    4、MRR 的优化方式:

    5、当优化器使用了 MRR 时,执行计划的 Extra 列会出现 “Using MRR” 。

    6、如果查询使用的二级索引的顺序本身与结果集的顺序一致,那么使用 MRR 后需要对得到的结果集进行排序。

    使用 MRR 还可以减少缓冲池中页被替换的次数,批量处理对键值的查询操作。

    可以使用命令 select @@optimizer_switch; 查看是否开启了 MRR:

    index_merge=on,index_merge_union=on,index_merge_sort_union=on,index_merge_intersection=on,engine_condition_pushdown=on,index_condition_pushdown=on,mrr=off,mrr_cost_based=on,block_nested_loop=on,batched_key_access=off,materialization=on,semijoin=on,loosescan=on,firstmatch=on,duplicateweedout=on,subquery_materialization_cost_based=on,use_index_extensions=on,condition_fanout_filter=on,derived_merge=on,use_invisible_indexes=off,skip_scan=on

    mrr_cost_based=on 表示是否通过 cost based 的方式来选择使用 MRR 。

    set @@optimizer_switch='mrr=on/off'; 命令开启或关闭 MRR 。

    select @@read_rnd_buffer_size ; 参数用来控制键值的缓冲区大小,默认 256K,当大于该参数值时,执行器根据主键对已缓存的数据进行排序,然后再通过主键取得行数据。

    总结

    以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对脚本之家的支持。

    您可能感兴趣的文章:
    • MySQL 学习总结 之 初步了解 InnoDB 存储引擎的架构设计
    • MySQL InnoDB row_id边界溢出验证的方法步骤
    • MySQL InnoDB如何保证事务特性示例详解
    • MySQL启动报错问题InnoDB:Unable to lock/ibdata1 error
    • MySQL InnoDB中的锁机制深入讲解
    • 详解MySQL(InnoDB)是如何处理死锁的
    • MySQL学习(七):Innodb存储引擎索引的实现原理详解
    • MySQL slow_log表无法修改成innodb引擎详解
    • MySQL存储引擎InnoDB的配置与使用的讲解
    • MySQL Innodb 存储结构 和 存储Null值 用法详解
    上一篇:MySQL索引不会被用到的情况汇总
    下一篇:MySQL5.6解压版服务无法启动之系统错误1067问题
  • 相关文章
  • 

    © 2016-2020 巨人网络通讯 版权所有

    《增值电信业务经营许可证》 苏ICP备15040257号-8

    MySQL InnoDB MRR优化指南 MySQL,InnoDB,MRR,优化,指南,