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;

相关推荐
其实防守也摸鱼14 小时前
《SQL注入进阶实验:基于sqli-Labs的报错注入(Error-Based Injection)实战解析》
网络·数据库·sql·安全·网络安全·sql注入·报错注入
Ting.~14 小时前
软件设计师备考笔记【day3】-数据库
数据库·笔记
Bert.Cai14 小时前
MySQL FLOOR()函数详解
数据库·mysql
小碗羊肉14 小时前
【MySQL | 第七篇】索引
数据库·mysql
m0_4954964114 小时前
SQL中如何获取前N个最大值并排除自己_利用窗口函数限制
jvm·数据库·python
m0_7406532214 小时前
mysql如何提取日期中的年份_使用year函数从日期中截取
jvm·数据库·python
hanyi_qwe14 小时前
Mysql 与 Nginx 双机高可用
数据库·mysql·nginx
S1998_1997111609•X14 小时前
login:/-system.web,dex.dmp,b-scode:app·%
网络·数据库·百度·facebook·twitter
运气好好的14 小时前
mysql数据库日志文件过大如何清理_定期备份与重置日志文件
jvm·数据库·python
2401_8314194414 小时前
如何防止MongoDB副本集被误初始化_副本集名称(replSetName)锁定
jvm·数据库·python