解释
EXPLAIN ― 显示语句的执行计划
概要
EXPLAIN [ ( option [, ...] ) ] statement
EXPLAIN [ ANALYZE ] [ VERBOSE ] statement
where option can be one of:
ANALYZE [ boolean ]
VERBOSE [ boolean ]
COSTS [ boolean ]
BUFFERS [ boolean ]
TIMING [ boolean ]
SUMMARY [ boolean ]
FORMAT { TEXT | XML | JSON | YAML }
描述
此命令显示 PostgreSQL 规划器为提供的语句生成的执行计划。执行计划显示如何扫描语句引用的表——通过普通顺序扫描、索引扫描等。— 如果引用了多个表,将使用哪些连接算法将每个输入表中所需的行组合在一起。
显示的最关键部分是估计的语句执行成本,这是计划人员对运行语句所需时间的猜测(以任意但通常平均磁盘页面提取的成本单位度量)。实际上显示了两个数字:可以返回第一行之前的启动成本,以及返回所有行的总成本。对于大多数查询,总成本是重要的,但在上下文中,计划者将选择最小的启动成本而不是最小的总成本(因为执行程序将在获得一行后停止,无论如何)。此外,如果您限制使用子句返回的行数,则计划器会在端点成本之间进行适当的插值,以估计哪个计划真正最便宜。EXISTS``LIMIT
该选项会导致语句实际执行,而不仅仅是计划执行。然后将实际运行时间统计信息添加到显示中,包括每个计划节点内花费的总已用时间(以毫秒为单位)及其实际返回的总行数。这对于查看计划员的估计值是否接近现实非常有用。ANALYZE
重要
请记住,该语句实际上是在使用选项时执行的。虽然会丢弃 a 将返回的任何输出,但语句的其他副作用将照常发生。如果您希望在 、、 或 语句上使用,而不让命令影响您的数据,请使用此方法:ANALYZE``EXPLAIN``SELECT``EXPLAIN ANALYZE``INSERT``UPDATE``DELETE``CREATE TABLE AS``EXECUTE
BEGIN;
EXPLAIN ANALYZE ...;
ROLLBACK;
只能指定 和 选项,并且只能按该顺序指定,而不将选项列表括在括号中。在PostgreSQL 9.0之前,唯一支持的无括号语法。预计所有新选项将仅在括号语法中受支持。ANALYZE``VERBOSE
参数
-
ANALYZE执行命令并显示实际运行时间和其他统计信息。此参数默认为 。
FALSE -
VERBOSE显示有关计划的其他信息。具体而言,包括计划树中每个节点的输出列列表、架构限定表和函数名称,始终使用范围表别名标记表达式中的变量,并始终打印显示统计信息的每个触发器的名称。此参数默认为 。
FALSE -
COSTS包括有关每个计划节点的估计启动和总成本的信息,以及估计的行数和每行的估计宽度。此参数默认为 。
TRUE -
BUFFERS包括有关缓冲区使用情况的信息。具体而言,包括命中、读取、弄脏和写入的共享块数,命中、读取、脏污和写入的本地块数,以及读取和写入的临时块数。命中意味着避免了读取,因为在需要时已在缓存中找到该块。共享块包含来自常规表和索引的数据;本地块包含来自临时表和索引的数据;而临时块包含排序、哈希、具体化计划节点和类似情况中使用的短期工作数据。脏块数表示此查询更改的以前未修改的块数;而写入的块数表示此后端在查询处理期间从缓存中逐出的以前脏的块数。为上层节点显示的块数包括其所有子节点使用的块数。在文本格式中,仅打印非零值。此参数只能在同时启用时使用。默认为 .
ANALYZE``FALSE -
TIMING在输出中包括实际启动时间和在每个节点上花费的时间。在某些系统上,重复读取系统时钟的开销可能会显著减慢查询速度,因此将此参数设置为仅需要实际行计数而不是确切时间时可能会很有用。始终测量整个语句的运行时间,即使使用此选项关闭了节点级计时也是如此。此参数只能在同时启用时使用。默认为 .
FALSE``ANALYZE``TRUE -
SUMMARY在查询计划之后包括摘要信息(例如,总计的时间信息)。使用时默认包含摘要信息,但默认情况下不包括摘要信息,但可以使用此选项启用。规划时间包括从缓存中获取计划所需的时间以及重新规划所需的时间(如有必要)。
ANALYZE``EXPLAIN EXECUTE -
FORMAT指定输出格式,可以是文本、XML、JSON 或 YAML。非文本输出包含与文本输出格式相同的信息,但程序更易于分析。此参数默认为 。
TEXT -
boolean指定应打开还是关闭所选选项。您可以编写 、 或 来启用该选项,也可以编写 、 或 来禁用它。*
布尔*值也可以省略,在这种情况下,假设。TRUE``ON``1``FALSE``OFF``0``TRUE -
statement您希望查看其执行计划的任何 、、 或语句。
SELECT``INSERT``UPDATE``DELETE``VALUES``EXECUTE``DECLARE``CREATE TABLE AS``CREATE MATERIALIZED VIEW AS