了解 EXPLAIN 语句

已完成

使用 EXPLAIN 语句显示查询的执行计划。 EXPLAIN 可用于任何 SELECT、INSERT、UPDATE、DELETE、VALUES、EXECUTE、DECLARE 或 CREATE TABLE AS 语句。

EXPLAIN 显示查询的执行计划,使你能够了解 PostgreSQL:如何执行语句、是否使用索引、如何联接表以及查询的表示成本。

EXPLAIN 的语法为:

EXPLAIN [ (parameter [, ...] ) ] statement

可选参数包括:

  • 分析
  • 详细
  • 成本
  • 缓冲区
  • 格式

例如:

EXPLAIN ANALYZE SELECT * FROM category ORDER BY cat_id;

此简单查询返回以下信息:

显示查询计划的 屏幕截图。

分析

此选项执行语句,并返回查询计划。 放弃该语句的输出,但仍执行该语句。 可以将 ROLLBACK 和 EXPLAIN ANALYZE 语句结合使用,以防止在对数据库进行更改(如 INSERT、UPDATE 或 DELETE)的查询中实际应用更改。 例如:

BEGIN;

> EXPLAIN ANALYZE INSERT INTO Animal 
> (ani_id, name, weight_kg, cat_id, enc_id) 
> VALUES (28, 'Robin Robin', 0.5, 1, 2);

ROLLBACK;

详细

显示其他信息,包括:

  • 计划树中每个节点的输出列列表
  • 架构限定表和函数名称
  • 表达式中的变量名称以及表别名
  • 每个用于显示统计数据的触发器的名称

成本

包括估计的启动成本以及总成本,以及每行的估计行数和估计宽度。

缓冲区

缓冲区只能与 ANALYZE 选项一起使用。 PostgreSQL 使用最近使用最少的缓存(LRU)在内存中存储常用数据。 缓冲区显示来自缓存的数据量,以及从磁盘检索的数据量。 显示共享块、本地块和临时块的命中数、读取数和写入数。 BUFFERS 提供的数据有助于了解查询的 I/O 密集型部分。

格式

定义输出格式。 XML、JSON 或 YAML 包含与 TEXT 相同的信息,但采用更易于程序使用的格式。 TEXT 为默认值。