显示出来的最关键的部分是预计的查询执行开销,这就是规划器对运行该查询所需时间的估计(以磁盘页面存取为单位计量)。实际上显示了两个成分:返回第一条记录前的启动时间,和返回所有记录的总时间。对于大多数查询而言,关心的是总时间,但是,在某些环境下,比如一个 EXISTS 子查询里,规划器将选择最小启动时间而不是最小总时间(因为执行器在获取一条记录后总是要停下来)。同样,如果你用一条 LIMIT 子句限制返回的记录数,规划器会在最终的开销上做一个合理的折中以计算哪个规划开销最省。
VERBOSE 选项输出规划树在系统内部的完整内容,而不仅仅是一个概要(并且还把它发送给 postmaster 日志文件)。通常这个选项只是对调试 Postgres 有用。
EXPLAIN SELECT * FROM foo; NOTICE: QUERY PLAN: Seq Scan on foo (cost=0.00..2.28 rows=128 width=4) EXPLAIN对同一个拥有支持查询 equijoin 条件的索引的表,EXPLAIN 将显示一个不同的规划:
EXPLAIN SELECT * FROM foo WHERE i = 4; NOTICE: QUERY PLAN: Index Scan using fi on foo (cost=0.00..0.42 rows=1 width=4) EXPLAIN最后,同一个拥有支持查询 equijoin 条件的索引的表,EXPLAIN 对使用一个聚集函数的查询将显示下面内容:
EXPLAIN SELECT sum(i) FROM foo WHERE i = 4; NOTICE: QUERY PLAN: Aggregate (cost=0.42..0.42 rows=1 width=4) -> Index Scan using fi on foo (cost=0.00..0.42 rows=1 width=4)注意这里显示的数字,甚至还有选择的查询策略都有可能在各个 Postgres 版本之间不同--因为规划器在不断改进。