加载中...

部分索引(Partial Index),又称条件索引或过滤索引,是只覆盖表中满足给定 WHERE 条件的那部分行的索引,语法如 CREATE INDEX idx ON orders (user_id) WHERE status = 'pending'。
当查询总是带有固定的筛选条件(如只查未处理订单、只查未删除记录)时,为全表建索引是浪费:大部分条目永远不会被用到。部分索引只索引"热"子集,体积更小、缓存更友好,插入与更新命中条件外的行时无需维护索引,写放大更低。配合唯一约束还能表达条件唯一性,如"每个用户至多一条生效记录":CREATE UNIQUE INDEX ON t (user_id) WHERE active。
优化器必须能证明查询的 WHERE 条件蕴含索引的条件才会使用部分索引,因此查询写法需与索引条件保持一致,参数化场景(条件值来自变量)可能无法匹配。
PostgreSQL 与 SQLite 长期支持;SQL Server 提供等价的筛选索引(Filtered Index);MySQL 截至 8.x 不支持部分索引,常以联合索引或生成列近似替代。

登录 后参与讨论
暂无讨论,来发表第一条评论吧