【发布时间】:2018-10-15 16:49:59
【问题描述】:
此查询在查询计划中显示“Plan Rows: 0”。
CREATE TABLE EMP (
EMP_ID CHAR(4),
EMP_NAME VARCHAR(200)
);
INSERT INTO EMP VALUES ( '1000', 'JOHN DOE' );
INSERT INTO EMP VALUES ( '1001', 'ALAN SMITHEE' );
INSERT INTO EMP VALUES ( '1002', 'JANE DOE' );
EXPLAIN (ANALYZE, FORMAT JSON)
SELECT * FROM EMP WHERE EMP_ID = NULL;
结果:
[ { "Plan": {
"Node Type": "Result",
"Parallel Aware": false,
"Startup Cost": 0.00,
"Total Cost": 0.00,
"Plan Rows": 0,
"Plan Width": 438,
"Actual Startup Time": 0.001,
"Actual Total Time": 0.001,
"Actual Rows": 0,
"Actual Loops": 1,
"One-Time Filter": "false"
},
"Planning Time": 0.023,
"Triggers": [ ],
"Execution Time": 0.011 } ]
此查询计划中的“Plan Rows: 0”是什么意思?
- PostgreSQL 没有扫描任何记录,因为
EMP_ID = NULL总是假的。 - PostgreSQL 扫描了
EMP表,因为统计信息可能与实际表内容不同。
【问题讨论】:
-
不相关但:大多数人更喜欢使用
explain (analyze, format text)(或简单的explain (analyze))的文本输出 - JSON 格式更适合通过例如自动分析。一个工具。
标签: postgresql sql-execution-plan