外观
一句话答案
Index Condition Pushdown 在索引层直接过滤不满足条件的记录,减少回表次数,MySQL 5.6+ 默认开启。
核心要点
原理: 联合索引 (a,b,c),查询 WHERE a=1 AND c=3
- 无ICP: 用 a=1 回表所有记录,Server层再过滤 c=3
- 有ICP: 在索引层同时检查 c=3,只回表满足条件的记录
效果: 减少回表 IO,MySQL 5.6+ 默认开启
追问与易错
追问方向:
- ICP 开启前后区别?
- 哪些场景 ICP 无法生效?
- 怎么验证 ICP 生效?
易错点:
- ❌ ICP 能让所有查询走索引——只是多过滤一步
- ❌ 混淆 Using index 和 Using index condition
💡 记忆锚点
没有 ICP 时像快递员拿到地址簿(索引)查到小区名就挨家敲门(回表)再看门牌号对不对。有了 ICP,快递员在地址簿上就同时核对门牌号,不对的直接跳过不用跑一趟——在索引层多做一步过滤,减少无效回表。EXPLAIN 中 Extra 显示 Using index condition 就说明生效了。