postgresql获取真正的execution plan

analyze会真正执行,除了select语句,最好放在一个事务中运行,然后rollback.

BEGIN;

EXPLAIN ANALYZE UPDATE ...;

ROLLBACK;

常用方式如下:

EXPLAIN (ANALYZE, BUFFERS, TIMING) SELECT ...;

sql 复制代码
ccc=# select * from t1;
 id | name 
----+------
  1 | aaa
  2 | bbb
  3 | ccc
  4 | ddd
(4 rows)

ccc=# begin;
BEGIN
ccc=*# EXPLAIN (ANALYZE, BUFFERS, TIMING) update t1 set name='yyy' where id=3;
                                              QUERY PLAN                                               
-------------------------------------------------------------------------------------------------------
 Update on t1  (cost=0.00..21.25 rows=0 width=0) (actual time=0.113..0.114 rows=0.00 loops=1)
   Buffers: shared hit=3 dirtied=1
   ->  Seq Scan on t1  (cost=0.00..21.25 rows=4 width=64) (actual time=0.012..0.014 rows=1.00 loops=1)
         Filter: (id = 3)
         Rows Removed by Filter: 3
         Buffers: shared hit=1
 Planning:
   Buffers: shared hit=3 read=6
 Planning Time: 2.737 ms
 Execution Time: 2.241 ms
(10 rows)

ccc=*# rollback;
ROLLBACK
ccc=# select * from t1;
 id | name 
----+------
  1 | aaa
  2 | bbb
  3 | ccc
  4 | ddd
(4 rows)

ccc=#

调试执行计划时可以临时enable/disable一些选项,详细列表见:

https://www.postgresql.org/docs/current/runtime-config-query.html

-- Plan with nested loop allowed (default)

EXPLAIN (ANALYZE, FORMAT JSON)

SELECT ... ;

-- Compare with nested loop discouraged

BEGIN;

SET LOCAL enable_nestloop = off;

EXPLAIN (ANALYZE, FORMAT JSON)

SELECT ... ;

COMMIT;

相关推荐
正在走向自律1 分钟前
深度剖析 KES 行标识体系:OID 与 ROWID 核心原理、实战案例及性能优化
数据库·oid·kes·rowid
一直都在57215 分钟前
MySQL索引优化
android·数据库·mysql
wjp@00130 分钟前
SQL server导出导入数据
运维·服务器·数据库
脑子加油站30 分钟前
MySQL8数据库高级特性
数据库·mysql
REDcker1 小时前
OpenSSL:C 语言 TLS 客户端完整示例
c语言·网络·数据库
zly35001 小时前
centos7 mysql 无法被远程连接
数据库·mysql
廿一夏1 小时前
MySql的增删改查
数据库·mysql·dba
瀚高PG实验室1 小时前
HGDB 4.5.8.8开启oracle兼容执行带聚合函数的SQL导致数据库进程被信号11杀死
数据库·sql·oracle·瀚高数据库
炘爚2 小时前
日志系统整体设计步骤以及功能函数梳理
运维·服务器·数据库
_下雨天.2 小时前
PostgreSQL日常维护
数据库·postgresql