了解 EXPLAIN 语句

已完成

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

EXPLAIN 显示查询的执行计划,可通过其了解 PostgreSQL 将如何执行语句、是否使用索引、表如何联接,以及查询的名义成本。

EXPLAIN 的语法为:

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

可选参数为:

  • 分析
  • 详细
  • COSTS
  • BUFFERS
  • FORMAT

例如:

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;

详细

显示其他信息,包括:

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

COSTS

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

BUFFERS

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

FORMAT

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