Skip to content
进阶

一句话答案

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 就说明生效了。