243 字
1 分钟
MySQL 索引下推:把过滤提前到存储引擎
索引下推(ICP)把部分原本由 Server 层执行的条件过滤下推到存储引擎层。引擎可以利用二级索引中的列先过滤,不符合条件的记录不再回表,从而减少 I/O。
与最左前缀的关系
假设联合索引为 (a, b, c),查询 a = 1 AND c = 3 时,最左前缀规则只能用 a 定位,c 不能用于确定索引范围;但如果索引中有 c,引擎可以在扫描索引时先过滤 c,减少回表次数。
没有索引下推:索引定位 → 回表 → Server 过滤开启索引下推:索引定位 → 引擎过滤 → 只对有效记录回表为什么主键查询不需要 ICP
InnoDB 聚簇索引叶子节点本身就是完整数据行,主键定位后已经拿到全部字段,没有“回表”这一步,索引下推也就没有额外收益。
MySQL 索引下推:把过滤提前到存储引擎
https://blog.xqcherry.top/posts/interview/mysql/index-condition-pushdown/ 目录