首页/数据/SQL 速查/PG EXPLAIN ANALYZE 与 BUFFERS
性能与执行计划72 条

PG EXPLAIN ANALYZE 与 BUFFERS

ANALYZE 真正执行查询并给出实际行数、耗时与循环次数;BUFFERS 附加共享缓存命中与磁盘读取统计。

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

示例

示例
EXPLAIN (ANALYZE, BUFFERS, TIMING)
SELECT o.id, o.total
FROM orders o
WHERE o.user_id = 100;

-- 输出示例:
-- Index Scan using idx_orders_user on orders o
--   (actual time=0.05..0.30 rows=12 loops=1)
--   Index Cond: (user_id = 100)
--   Buffers: shared hit=5 read=2
-- Planning Time: 0.3 ms
-- Execution Time: 0.5 ms

写语句安全实测

写语句安全实测
BEGIN;
EXPLAIN (ANALYZE) UPDATE orders SET status = 'x' WHERE id = 1;
ROLLBACK;  -- 实测后回滚
actual time首行..末行的实测耗时(毫秒)
rows=12 loops=1每次循环平均行数;总行数为 rows × loops
Buffersshared hit/read:命中内存与读磁盘的块数
TIMING off关闭逐节点计时可减少测量开销,汇总时间仍保留
ANALYZE 会真正执行语句:写操作必须在事务里执行后回滚,且避开业务高峰。

易错点

  • 对写语句直接 ANALYZE:会真实修改数据并持有锁,务必用事务加回滚控制
  • 忽略 loops 直接看 rows:嵌套循环内层 rows 是单次循环值,不乘 loops 会低估扫描量

数据来源与参考

  • PostgreSQL Documentation §14.1 Using EXPLAIN
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌