我的编程空间,编程开发者的网络收藏夹
学习永远不晚

MySQL MRR和ICP介绍

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

MySQL MRR和ICP介绍

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依赖的是联合索引。


免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

MySQL MRR和ICP介绍

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

MySQL <>和<=> 运算符介绍

<> 运算符作用:表示不等于。 说明:和 “!=” 运算符的作用一致,相较之下 “<>” 的可读性较差。### 查询非汉族用户,以下两条语句的作用是一致的。 > SELECT * FROM user WHERE nation != "汉族"
2022-05-22

MySQL介绍

什么是数据库?作用:存储数据的,能够长期(断电,关机)保持数据。数据存储在哪里:硬盘和内存我们平时说的数据库:数据库管理系统(软件)(DataBase Manager System: DBS)数据库软件(电脑的excel文件)中可以创建多个文件夹(数据库(逻辑
MySQL介绍
2017-06-20

MySQL explain介绍

Explain简介 本文主要讲述如何通过 explain 命令获取 select 语句的执行计划,通过 explain 我们可以知道以下信息:表的读取顺序,数据读取操作的类型,哪些索引可以使用,哪些索引实际使用了,表之间的引用,每张表有多少行被优化器查询等信息
MySQL explain介绍
2019-05-07

MySQL事务介绍

什么是事务事务的概念从业务层面上来说,事务就是一个最小的不可分割的单元,通常一个事务对应的是一个完整的业务(比如银行的转账操作)。为什么要有事务仍以银行转账为例加以说明,比如我要从账号A转账100元到账号B,现在数据库有一张表account,那么就意味着需要同
MySQL事务介绍
2019-11-07

编程热搜

目录