mysql Multi-Range Read优化
【摘要】 Multi-Range Read优化(MRR)。这个优化的主要目的是尽量使用顺序读盘。 MRR优化的设计思路。此时,语句的执行流程变成了这样:根据索引a,定位到满足条件的记录,将id值放入read_rnd_buffer中;将read_rnd_buffer中的id进行递增排序;排序后的id数组,依次到主键id索引中查记录,并作为结果返回。这里,read_rnd_buffer的大小是由read...
Multi-Range Read优化(MRR)。这个优化的主要目的是尽量使用顺序读盘。
MRR优化的设计思路。此时,语句的执行流程变成了这样:
-
根据索引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了。

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)