证明索引确有必要
索引会消耗写入吞吐和存储。从一个具体查询、实测执行计划和基线延迟开始。如果查询只扫描少量行或已经很快,索引只增加成本。先在预发副本上创建,估算耗时和锁行为。
CREATE INDEX CONCURRENTLY idx_orders_customer_created
ON orders (customer_id, created_at DESC);
CONCURRENTLY 避免阻塞写入,但耗时更长,且不能在事务内运行。失败可能留下无效索引;检查 pg_index.indisvalid,删除后重试。
观察副本与锁
构建会读表并生成 WAL,可能延迟副本。构建期间监控复制延迟和查询延迟。使用 lock timeout,在 DDL 无法获取短暂锁时快速失败,而不是排队在长事务后。
验证并决定
前后运行 EXPLAIN (ANALYZE, BUFFERS),确认规划器使用索引且目标查询改善。检查写入延迟没有回退。如果索引未被使用或改善可忽略,就删除它;无用索引只是额外开销。