EXPLAIN
是一个用于显示语句执行计划的实用程序命令。
EXPLAIN
一直存在于 PostgreSQL 中。
用法
EXPLAIN 可用于显示以下语句类型的执行计划
SELECT
INSERT
UPDATE
DELETE
VALUES
EXECUTE
DECLARE
CREATE TABLE AS
CREATE MATERIALIZED VIEW
EXPLAIN 选项
PostgreSQL 版本可用的选项概述
17 | 16 | 15 | 14 | 13 | 12 | 11 | 10 | 9.6 | 9.5 | 9.4 | 9.3 | 9.2 | 9.1 | 9.0 | 8.4 | 8.3 | 8.2 | 8.1 | 8.0 | 7.4 | 7.3 | 7.2 | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
ANALYZE |
|||||||||||||||||||||||
BUFFERS |
|||||||||||||||||||||||
COSTS |
|||||||||||||||||||||||
FORMAT |
|||||||||||||||||||||||
GENERIC_PLAN |
|||||||||||||||||||||||
MEMORY |
|||||||||||||||||||||||
SERIALIZE |
|||||||||||||||||||||||
SETTINGS |
|||||||||||||||||||||||
SUMMARY |
|||||||||||||||||||||||
TIMING |
|||||||||||||||||||||||
VERBOSE |
|||||||||||||||||||||||
WAL |
更改历史记录
- PostgreSQL 18
EXPLAIN ANALYZE
现在显示已禁用节点的数量(提交 c01743aa)
- PostgreSQL 17
- PostgreSQL 16
- 添加了
GENERIC_PLAN
选项(提交 3c05284d)
- 添加了
- PostgreSQL 15
- 跟踪临时文件块的 I/O 定时 (efb0ef90)
- PostgreSQL 14
- 如果
compute_query_id
未禁用,则EXPLAIN VERBOSE
现在将显示查询标识符(提交 4f0b0966)
- 如果
- PostgreSQL 13
- 添加了
WAL
选项(提交 33e05f89)
- 添加了
- PostgreSQL 12
- 添加了
SETTINGS
选项(提交 ea569d64)
- 添加了
- PostgreSQL 11
- 在输出中显示并行工作程序的排序活动(提交 bf11e7ee)
- PostgreSQL 10
- 添加了
SUMMARY
选项(提交 f9b1a0dd)
- 添加了
- PostgreSQL 9.4
- PostgreSQL 9.2
- 添加了
TIMING
选项(提交 af7914c6)
- 添加了
- PostgreSQL 9.0
- PostgreSQL 8.4
VERBOSE
选项现在打印每个计划节点的目标列表,而不是转储内部表示(提交 87a2f050)
- PostgreSQL 7.2
- 添加了
ANALYZE
选项(提交 89fa5518)
- 添加了
示例
EXPLAIN
的最小用法示例
postgres=# EXPLAIN SELECT * FROM bar; QUERY PLAN ------------------------------------------------------- Seq Scan on bar (cost=0.00..35.50 rows=2550 width=4) (1 row)
尝试使用不支持的查询类型执行 EXPLAIN
postgres=# EXPLAIN COPY bar FROM STDIN; ERROR: syntax error at or near "COPY" LINE 1: EXPLAIN COPY bar FROM STDIN;
参考文献
- PostgreSQL 文档: EXPLAIN
- PostgreSQL 文档: 使用 EXPLAIN
有用链接
- explain.depesz.com - 用于可视化 EXPLAIN 输出的在线工具
- PostgreSQL Explain - 来自 pgMustard 项目的有用词汇表