PostgreSQL 慢查询排查记录
一个列表页突然要三秒多才出来。先打开 pg_stat_statements,按总耗时排序,排第一的是一条带 ORDER BY created_at 的分页查询。
EXPLAIN (ANALYZE, BUFFERS)
SELECT * FROM orders WHERE user_id = 42
ORDER BY created_at DESC LIMIT 20;
执行计划里是 Seq Scan 加排序。建一个 (user_id, created_at DESC) 的联合索引后变成 Index Scan,耗时降到 2ms。教训:只给 user_id 建单列索引不够,排序字段也要放进去。