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