关于mysql5.6版本的索引下推(ICP)

ICP(Index Condition Pushdown)是MySQL 5.6引入的查询优化策略,它允许存储引擎在回表前先判断部分索引相关的查询条件,减少回表操作,从而提高查询效率。当查询计划中出现'Using index condition'时,表明使用了索引下推。通过创建索引并合理利用ICP,可以显著减少I/O操作,提升数据库性能。
摘要由CSDN通过智能技术生成

MySQL学习----ICP(索引下推)

官网原地址:
https://dev.mysql.com/doc/refman/8.0/en/index-condition-pushdown-optimization.html
前提工作:
创建一个学生成绩表,
建立索引
create index id_name on student(name);
在这里插入图片描述

	explain
	SELECT *  
    FROM  school.student
	where  name>'z' and name like '%a';

一.什么是ICP

ICP索引下推功能是mysql5.6推出的查询优化策略,把原本是server层做的索引条件判断,下推给存储引擎层做,可以减少存储引擎必须访问基表的次数和MySQL服务器必须访问存储引擎的次数。,提高查询效率

为什么需要索引下推

没有索引下推的步骤

  1. server 层首先调用存储引擎的接口定位到满足形成扫描区间的区间的第一条二级记录 (这个sql下就是name>‘z’)
  2. 存储引擎根据B+树索引快速定位到这条二级索引记录后,根据该二级索引记录的主键值回表,将完整的记录返回给server层
  3. server层再判断其他的搜索条件是否成立,如果成立发送给客户端,否则跳过该条记录,然后向存储引擎要下一条记录
  4. 直至将扫描区间的所有记录都扫描为止
    有了索引下推之后的步骤
  5. server 层首先调用存储引擎的接口定位到满足形成扫描区间的区间的第一条二级记录。
  6. 存储引擎根据B+树索引快速定位到这条二级记录后,不是急于回表操作,而是先判断一下所有关于name 索引中包含的列是否成立,也就是name>‘z’ and name like ‘%a’
    是否成立,如果不成立则跳过该记录,去下一条索引记录,成立则回表。
  7. setver再判断其他的搜索条件是否成立,成立就返回客户端,不成立就跳过,然后去判断下一条存储引擎回表的记录。
  8. 直至将扫描区间的所有记录都扫描为止

节省I/0的地方
因为每次执行回表操作,需要将一个聚簇索引页面加载到内存中,这样省去了多次回表操作,节省了I/O。
如何知道有没有进行索引下推
查看执行计划的Extra:Using index condition
存储引擎存判断的条件
所有与该索引有关的判断条件
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值