服务器之家:专注于服务器技术及软件下载分享
分类导航

Mysql|Sql Server|Oracle|Redis|MongoDB|PostgreSQL|Sqlite|DB2|mariadb|

服务器之家 - 数据库 - Mysql - MySQL InnoDB MRR优化指南

MySQL InnoDB MRR优化指南

2020-11-29 14:57coderbee笔记 Mysql

这篇文章主要给大家介绍了关于MySQL InnoDB MRR优化的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用MySQL具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧

前言

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:

?
1
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,当大于该参数值时,执行器根据主键对已缓存的数据进行排序,然后再通过主键取得行数据。

总结

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

原文链接:https://coderbee.net/index.php/db/20190812/1913

延伸 · 阅读

精彩推荐
  • MysqlMySQL中create table as 与like的区别分析

    MySQL中create table as 与like的区别分析

    这篇文章主要介绍了MySQL中create table as 与like的区别,结合实例分析了二者在使用中的具体区别与主要用途,需要的朋友可以参考下 ...

    龙鱼鹿1522020-05-31
  • Mysql详解MySQL的limit用法和分页查询语句的性能分析

    详解MySQL的limit用法和分页查询语句的性能分析

    本篇文章主要介绍了详解MySQL的limit用法和分页查询语句的性能分析,具有一定的参考价值,感兴趣的小伙伴们可以参考一下。...

    唐成勇2522020-07-23
  • MysqlMySQL数据库的实时备份知识点详解

    MySQL数据库的实时备份知识点详解

    本篇文章给大家分享了关于MySQL数据库的实时备份知识点内容,有需要的朋友们可以参考下。...

    吴剑4132019-06-30
  • Mysql通过MySQL优化Discuz!的热帖翻页的技巧

    通过MySQL优化Discuz!的热帖翻页的技巧

    这篇文章主要介绍了通过MySQL优化Discuz!的热帖翻页的技巧,包括更新索引来降低服务器负载等方面,需要的朋友可以参考下 ...

    叶金荣3342020-05-05
  • Mysql优化mysql的limit offset的例子

    优化mysql的limit offset的例子

    在mysql中,通常使用limit做分页,而且经常会跟order by 连用。在order by 上加索引有时候是很有帮助的,不然系统会做很多的filesort ...

    MYSQL教程网2542019-12-16
  • MysqlMySQL 管理

    MySQL 管理

    对于网站的开发者来说,MySQL是一个较受欢迎的选择,这不仅是因为它对于任何平台上的非商业应用都是免费的,而且也因为它的架设和使用非常的简单。...

    mysql技术网3262019-10-15
  • MysqlMySQL无法存储Emoji表情问题的解决方法分析

    MySQL无法存储Emoji表情问题的解决方法分析

    这篇文章主要介绍了MySQL无法存储Emoji表情问题的解决方法,结合实例形式分析了存储Emoji表情报错的原因及相应的解决方法,需要的朋友可以参考下 ...

    赤砂之蝎我爱罗5022020-09-01
  • MysqlMysql8.0.17安装教程【推荐】

    Mysql8.0.17安装教程【推荐】

    本文通过图文并茂的形式给大家介绍了Mysql8.0.17安装,非常不错,具有一定的参考借鉴价值,需要的朋友可以参考下 ...

    吃藕的松柯3692020-05-31