博客园文章

Posted lidb002

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了博客园文章相关的知识,希望对你有一定的参考价值。

原理:

如果基表很大,数据没有被缓存,在二级索引上使用范围扫描读取行可能会导致大量的随机磁盘访问。使用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和随机读。

\'博客园文章_1\'

 

使用MRR之后:

\'博客园文章_1_02\'

 

开启/关闭MRR

1

2

​set​​ ​​optimizer_switch=​​​​\'mrr=on mrr_cost_based=on\'​​​​; #mrr_cost_based表示开启mrr后,优化器是否根据cost来决定是否使用mrr​

​set​​ ​​oprimizer_switch=​​​​\'mrr=off\'​​​​;​

默认是开启MRR的。

 

对于MRR,参数read_rnd_buffer_size用来控制键值缓冲区的大小。

以上是关于博客园文章的主要内容,如果未能解决你的问题,请参考以下文章

博客园排版简单介绍

爬虫实战使用python爬取博客园的某一篇文章

博客园添加目录索引

优化博客园的JS代码总结

制作博客园目录导航

博客园备份提取