ICP 优化的全称是 Index Condition Pushdown Optimization 。
ICP 优化适用于 MySQL 利用索引从表里检索数据的场景。
ICP 适用的场景
- ICP 用于访问方法是
range/ref/eq_ref/ref_or_null
,且需要访问表的完整行记录。 - ICP适用于 InnoDB 和 MyISAM 的表,包括分区的表。
- 对于 InnoDB 表,ICP只适用于二级索引。ICP 的目标是减少访问表的完整行的读数量从而减少 I/O 操作。对于 InnoDB 的聚簇索引,完整的记录已经读进 InnoDB 的缓存,使用 ICP 不能减少 I/O 。
- ICP 不支持建立在虚拟列上的二级索引。InnoDB 支持在虚拟列上建立二级索引。
- 引用子查询、存储函数的条件没法下推。
- Triggered conditions 也没法下推。