了解 EXPLAIN 语句
使用 EXPLAIN 语句显示查询的执行计划。 EXPLAIN 可以与任何 SELECT、INSERT、UPDATE、DELETE、VALUES、EXECUTE、DECLARE 或 CREATE TABLE AS 语句一起使用。
EXPLAIN 显示查询的执行计划,使你能够了解 PostgreSQL:如何执行语句、是否使用索引、如何联接表以及查询的表示成本。
EXPLAIN 的语法为:
EXPLAIN [ (parameter [, ...] ) ] statement
可选参数包括:
- ANALYZE
- VERBOSE
- 成本
- BUFFERS
- FORMAT
例如:
EXPLAIN ANALYZE SELECT * FROM category ORDER BY cat_id;
此简单查询返回以下信息:
显示查询计划的 
ANALYZE
此选项执行语句,并返回查询计划。 放弃该语句的输出,但仍执行该语句。 可以组合 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;
VERBOSE
显示其他信息,包括:
- 计划树中每个节点的输出列列表
- 架构限定的表和函数名称
- 表达式中的变量名称以及表别名
- 显示其统计信息的每个触发器的名称
成本
包括估计的启动成本以及总成本,以及每行的估计行数和估计宽度。
BUFFERS
缓冲区只能与 ANALYZE 选项一起使用。 PostgreSQL 使用最近使用最少的缓存(LRU)在内存中存储常用数据。 缓冲区显示来自缓存的数据量,以及从磁盘检索的数据量。 显示共享、本地和临时块命中、读取和写入的数量。 BUFFERS 提供的数据有助于了解查询的 I/O 密集型部分。
FORMAT
定义输出格式。 XML、JSON 或 YAML 包含与 TEXT 相同的信息,但采用更易于程序使用的格式。 TEXT 为默认值。