了解 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 为默认值。