阅读 PostgreSQL 中的 EXPLAIN ANALYZE 输出而不迷失

EXPLAIN ANALYZE 输出看起来令人生畏,直到您知道实际重要的三个数字。以下是我阅读它们的顺序,以及指向特定错误的模式。 实际重要的三个数字 1. 总执行时间 (Execution Time) Total runtime: 1234.567 ms 这是最重要的指标。如果查询慢,这里会告诉您。 2. 实际行数 vs 估计行数 (Actual vs Estimated Rows) Seq Scan on users (cost=0.00..123.45 rows=1000 width=32) (actual time=1.234..567.890 rows=50000 loops=1) 巨大差异表明规划器做出了错误假设。 3. 缓冲区命中率 (Buffer Hit Ratio) Buffers: shared hit=1000 read=50 高命中率 = 好缓存使用,低命中率 = 磁盘 I/O 问题。 阅读顺序 从底部开始 - 总执行时间 向上工作 - 查找成本最高的节点 检查行数估计 - 实际 vs 估计 查看缓冲区统计 - I/O 模式 常见问题模式 顺序扫描当应该索引扫描时 Seq Scan on large_table (cost=1000.00..2000.00 rows=100000 width=32) 解决方案: 添加适当的索引 ...

2026年5月2日 · 1 分钟 · 技术笔记