ICP(index condition pushdown)是mysql利用索引(二级索引)元组和筛字段在索引中的where条件从表中提取数据记录的一种优化操作。ICP的思想是:存储引擎在访问索引的时候检查筛选字段在索引中的where条件(pushed index condition,推送的索引条件),如果索引元组中的数据不满足推送的索引条件,那么就过滤掉该条数据记录。ICP(优化器)尽可能的把index condition的处理从server层下推到storage engine层。storage engine使用索引过过滤不相关的数据,仅返回符合index condition条件的数据给server层。也是说数据过滤尽可能在storage engine层进行,而不是返回所有数据给server层,然后后再根据where条件进行过滤。 Index Condition Pushdown (ICP)是MySQL 5.6 版本中的新特性,是一种在存储引擎层使用索引过滤数据的一种优化方式。 a 当关闭ICP时,index 仅仅是data access 的一种访问方式,存储引擎通过索引回表获取的数据会传递到MySQL Server 层进行where条件过滤。 b 当打开ICP时,如果部分where条件能使用索引中的字段,MySQL Server 会把这部分下推到引擎层,可以利用index过滤的where条件在存储引擎层进行数据过滤,而非将所有通过index access的结果传递到MySQL server层进行where过滤. 优化效果:ICP能减少引擎层访问基表的次数和MySQL Server 访问存储引擎的次数,减少io次数,提高查询语句性能。 ICP 开启时 ,MySQL将在存储引擎层 利用索引过滤数据,减少不必要的回表,注意 虚线的using where 表示如果where条件中含有没有被索引的字段,则还是要经过MySQL Server 层过滤。 ICP的使用限制: 1 当sql需要全表访问时,ICP的优化策略可用于range, ref, eq_ref, ref_or_null 类型的访问数据方法 。 2 支持InnoDB和MyISAM表。 3 ICP只能用于二级索引,不能用于主索引。 4 并非全部where条件都可以用ICP筛选。 如果where条件的字段不在索引列中,还是要读取整表的记录到server端做where过滤。 5 ICP的加速效果取决于在存储引擎内通过ICP筛选掉的数据的比例。 6 5.6 版本的不支持分表的ICP 功能,5.7 版本的开始支持。 7 当sql 使用覆盖索引时,不支持ICP 优化方法。
MySQL Index Condition Pushdown(ICP)的使用限制
来源:这里教程网
时间:2026-03-01 11:46:10
作者:
编辑推荐:
下一篇:
相关推荐
-
雷神推出 MIX PRO II 迷你主机:基于 Ultra 200H,玻璃上盖 + ARGB 灯效
2 月 9 日消息,雷神 (THUNDEROBOT) 现已宣布推出基于英
-
制造商 Musnap 推出彩色墨水屏电纸书 Ocean C:支持手写笔、第三方安卓应用
2 月 10 日消息,制造商 Musnap 现已在海外推出一款 Oce
热文推荐
- 这一次,带你搞清楚MySQL的事务隔离级别!
这一次,带你搞清楚MySQL的事务隔离级别!
26-03-01 - 【Django青铜修炼手册】django+mysql的使用
【Django青铜修炼手册】django+mysql的使用
26-03-01 - MySQL基本知识点梳理和查询优化
MySQL基本知识点梳理和查询优化
26-03-01 - 填坑利器?Redis如何弥补传统MySQL架构的不足
填坑利器?Redis如何弥补传统MySQL架构的不足
26-03-01 - 一文替你全部搞定:MySQL命令。
一文替你全部搞定:MySQL命令。
26-03-01 - 从本地MySQL迁移到云数据库,为什么是Amazon Aurora?
从本地MySQL迁移到云数据库,为什么是Amazon Aurora?
26-03-01 - 画像预先计算的一点设想.时间段分片
画像预先计算的一点设想.时间段分片
26-03-01 - mysql实现主从复制
mysql实现主从复制
26-03-01 - 数据库的那些事(全是干货)
数据库的那些事(全是干货)
26-03-01 - 技本功丨浅谈MySQL的七种锁
技本功丨浅谈MySQL的七种锁
26-03-01
