首页/数据/SQL 速查/PostgreSQL 部分索引
性能与执行计划72 条

PostgreSQL 部分索引

只索引满足条件的数据行:过滤条件固定、热点数据占比低的查询(如未完成订单)能显著缩小索引。

SQL 速查数据更新于 2026-10-12

示例

示例
CREATE INDEX idx_orders_pending_created
  ON orders (created_at)
  WHERE status = 'pending';

-- 命中:查询条件包含 status = 'pending'
SELECT * FROM orders
WHERE status = 'pending' AND created_at > now() - interval '1 day';

-- 不命中:查询没有 status = 'pending' 条件
SELECT * FROM orders WHERE created_at > now() - interval '1 day';
原理索引只覆盖满足谓词的行,体积小、维护成本低
命中前提查询谓词能被优化器论证蕴含索引谓词(简单等值与范围通常可以)
典型场景未完成、未删除、指定类型的数据子集

易错点

  • 查询端少写谓词:条件推不出索引谓词时完全用不上,需要改写查询或调整索引谓词
  • 为状态频繁变化的数据建部分索引:行进出谓词范围时索引与统计都要维护,评估更新成本

数据来源与参考

  • PostgreSQL Documentation · Partial Indexes
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌