加入收藏 | 设为首页 | 会员中心 | 我要投稿 核心网 (https://www.hxwgxz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程 > 正文

MySQL MRR和ICP说明

发布时间:2022-03-24 19:18:11 所属栏目:编程 来源:互联网
导读:MRR 「Multi-Range Read」初步理解 对where条件拆分,减少通过索引查到过多无用的数据;查询索引页叶子节点的主键ID后不是直接读取数据,而是把满足条件的主键ID进行排序,然后在进行数据查找。 MySQL 5.6开始支持Multi-Range Read(MRR)优化。目的是为了减少
       MRR 「Multi-Range Read」初步理解 对where条件拆分,减少通过索引查到过多无用的数据;查询索引页叶子节点的主键ID后不是直接读取数据,而是把满足条件的主键ID进行排序,然后在进行数据查找。
 
      MySQL 5.6开始支持Multi-Range Read(MRR)优化。目的是为了减少磁盘的随机访问,并且将随机访问转化为较为顺序的数据访问,这对IO-bound类型的SQL查询语句可带来性能极大的提升。MRR优化可适用于rangeref,eq_ref类型的查询
 
MRR优化的好处:

     a)MRR使数据访问变得较为顺序。在查询辅助索引时,首先根据得到的查询结果按照主键进行排序,并按照主键排序的顺序进行书签查找
 
     b)减少缓冲池中页被替换的次数
 
     c)批量处理对键值的查询操作
 
对于InnoDB和MyISAM存储引擎的范围查询和JOIN查询操作,MRR工作方式如下

a)将查询得到的辅助索引键值存放在一个缓存中,这是缓存中的数据是根据辅助索引键值排序的
  
b)将缓存中的键值根据RowID进行排序
 
c)根据RowID的排序顺序来访问实际的数据文件
 
Index Condition Pushdown (ICP)是MySQL用索引去表里取数据的一种优化。如果禁用ICP,引擎层会穿过索引在基表中寻找数据行,然后返回给MySQL Server层,再去为这些数据行进行WHERE后的条件的过滤。ICP启用,如果部分WHERE条件能使用索引中的字段,MySQL Server 会把这部分下推到引擎层。存储引擎通过使用索引条目,然后推索引条件进行评估,使用这个索引把满足的行从表中读取出。ICP能减少引擎层访问基表的次数和MySQL Server 访问存储引擎的次数。
 
ICP 「Index Condition Pushdown」初步理解在通过辅助索引查询时进一步过滤where其他条件,前提是where条件的数据在该索引中可以获取到。
 
备注个人理解,这两种优化前提都依赖索引,ICP依赖的是联合索引。

(编辑:核心网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读