mysql Multi-Range Read优化

网友投稿 651 2022-05-28

Multi-Range Read优化(MRR)。这个优化的主要目的是尽量使用顺序读盘。

MRR优化的设计思路。此时,语句的执行流程变成了这样:

mysql Multi-Range Read优化

根据索引a,定位到满足条件的记录,将id值放入read_rnd_buffer中;

将read_rnd_buffer中的id进行递增排序;

排序后的id数组,依次到主键id索引中查记录,并作为结果返回。

这里,read_rnd_buffer的大小是由read_rnd_buffer_size参数控制的。如果步骤1中,read_rnd_buffer放满了,就会先执行完步骤2和3,然后清空read_rnd_buffer。之后继续找索引a的下个记录,并继续循环。

另外需要说明的是,如果你想要稳定地使用MRR优化的话,需要设置set optimizer_switch="mrr_cost_based=off"。(官方文档的说法,是现在的优化器策略,判断消耗的时候,会更倾向于不使用MRR,把mrr_cost_based设置为off,就是固定使用MRR了。

MySQL

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:oracle 常见的几种IO操作
下一篇:C++ 缓冲区 (buffer)
相关文章