概述
为性能建了分区表,却因为过滤条件未命中分区键而依旧扫描所有分区,是常见误区。裁剪不是自动的,必须让查询在分区键上给出规划器可推导的取值。
关键步骤
- 对生产查询运行 EXPLAIN ANALYZE,查看出现哪些分区。
- 确认 WHERE 在分区键上使用常量或稳定表达式。
- 检查参数化查询是否会因计划期未知取值而破坏裁剪。
- 让每个分区的索引与过滤列对齐。
验证
- 计划中不出现被裁剪掉的分区。
- 存活分区使用索引而非扫描。
- 参数化查询在运行时仍能裁剪。
- 查询范围与分区边界对齐。
注意事项
- 只有查询限定分区键时裁剪才有帮助;宽泛分析查询仍会触及大量分区。
- 过度分区会增加规划时间与目录开销,却不会为宽查询改善裁剪。
适用范围
本条目围绕「验证分区裁剪是否有效」给出可复制的步骤、验证方式与常见问题,适合需要按此流程落地的工程团队。执行时请结合自身上下文调整命令与阈值,并在变更前后留存证据,便于后续复核与回滚。
EXPLAIN (ANALYZE, BUFFERS)
SELECT * FROM metrics
WHERE ts >= now() - interval '1 day'
AND name = 'cpu';
-- the plan should mention only the current partitions