蹉跎莫遣韶光老,人生唯有读书好。这篇文章主要讲述博客园文章相关的知识,希望能为你提供帮助。
原理:
如果基表很大,数据没有被缓存,在二级索引上使用范围扫描读取行可能会导致大量的随机磁盘访问。使用Multi-Range Read新特性,mysql可以减少对磁盘的随机读的次数:首先,mysql只是扫描索引,收集相关行的keys;然后,将收集到的keys进行排序;最后通过有序的主键去访问基表。
Multi-Range Read特性的目的就是减少对磁盘的随机访问,进而对基表执行更多的顺序扫描。
使用MRR后,执行计划中extra部分会显示"using mrr"
-如果需要表进行全表扫描,innodb和myisam不使用mrr。
-索引能覆盖的时候,mrr特性也用不上。
-Multi-Range Read(MRR) 可以用于range、ref、eq_ref类型的查询。
未开启MRR之前:由于mysql存储数据的方式: 辅助索引的存储顺序并非与主键的顺序一致,从图中可以看出,根据辅助索引获取的主键来访问表中的数据会导致随机的IO。不同主键不在同一个page里面时必然导致多次IO和随机读。
文章图片
使用MRR之后:
文章图片
开启/关闭MRR:
1 2 | ??set? ?
??optimizer_switch=? ???\'mrr=on mrr_cost_based=on\'? ???;
#mrr_cost_based表示开启mrr后,优化器是否根据cost来决定是否使用mrr? ?? ?set? ?
??oprimizer_switch=? ???\'mrr=off\'? ???;
? ? |
【博客园文章】对于MRR,参数read_rnd_buffer_size用来控制键值缓冲区的大小。
推荐阅读
- 全面了解知识产权管理体系
- 3D可视化打造智慧工厂数字化管理
- zookeeper 做注册中心详细介绍
- 画了20张图,详解浏览器渲染引擎工作原理
- 理论+实例,带你掌握Linux的页目录和页表
- 开始学linux的日子 NO.1
- ISO9001质量管理体系
- 请填写标题
- CS信息系统建设和服务能力评估你了解吗