MySQL MRR

简介

MRR,全称「Multi-Range Read Optimization」。
简单说:MRR 通过把「随机磁盘读」,转化为「顺序磁盘读」,从而提高了索引查询的性能。

命令

mysql > set optimizer_switch='mrr=on';

另外还有一个参数mrr_cost_based: on/off
则是用来告诉优化器,要不要基于使用 MRR 的成本,考虑使用 MRR 是否值得(cost-based choice),来决定具体的 sql 语句里要不要使用 MRR。
很明显,对于只返回一行数据的查询,是没有必要 MRR 的,而如果你把 mrr_cost_based 设为 off,那优化器就会通通使用 MRR,这在有些情况下是很 stupid 的,所以建议这个配置还是设为 on,毕竟优化器在绝大多数情况下都是正确的。

开启前磁盘运动轨迹

image.png

先到左边的二级索引找,找到第一条符合条件的记录(实际上每个节点是一个页,一个页可以有很多条记录,这里我们假设每个页只有一条),接着到右边去读取这条数据的完整记录。

读取完后,回到左边,继续找下一条符合条件的记录,找到后,再到右边读取

开启后磁盘运动轨迹

image.png

对于 Innodb,则会按照聚簇索引键值排好序,再顺序的读取聚簇索引。

优势

1、磁盘和磁头不再需要来回做机械运动;
2、可以充分利用磁盘预读
3、在一次查询中,每一页的数据只会从磁盘读取一次

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 系列MySQL实战45讲阅读笔记-MySQL入门MySQL实战45讲阅读笔记-日志MySQL实战45讲阅读笔记-锁...
    Mhhhhhhy阅读 4,183评论 0 2
  • 第六天 mysql索引 mysql索引类型 btree rtree hash fulltext gis btree...
    燮_0e5d阅读 3,287评论 0 0
  • 上节回顾 索引类型BTREE : b-tree , b+tree , b*treeRTREEFULLTExT...
    JoinMyTeam阅读 2,047评论 0 0
  • 执行计划分析 什么是执行计划? select * from city where sname='张飞'; 分析的是...
    later02阅读 3,362评论 0 1
  • 局部性原理 https://baike.baidu.com/item/%E5%B1%80%E9%83%A8%E6%...
    我犟不过你阅读 3,961评论 0 1

友情链接更多精彩内容