如何使用 EXPLAIN 和 EXPLAIN ANALYZE 分析查询计划?

推荐答案

  • EXPLAIN 命令用于显示 PostgreSQL 如何执行查询的查询计划。它不会实际执行查询,而是返回查询的执行计划。
  • EXPLAIN ANALYZE 命令不仅显示查询计划,还会实际执行查询,并返回执行时间、行数等详细信息。

本题详细解读

1. EXPLAIN 命令

EXPLAIN 命令用于查看 PostgreSQL 如何执行 SQL 查询。它返回一个查询计划,显示 PostgreSQL 将如何访问表、使用索引、连接表等。

示例:

输出示例:

  • Seq Scan:表示 PostgreSQL 将对 employees 表进行顺序扫描。
  • cost=0.00..10.50:表示查询的预估成本,第一个数字是启动成本,第二个数字是总成本。
  • rows=1:表示预估返回的行数。
  • width=244:表示每行的预估宽度(字节数)。
  • Filter: (department_id = 10):表示过滤条件。

2. EXPLAIN ANALYZE 命令

EXPLAIN ANALYZE 命令不仅显示查询计划,还会实际执行查询,并返回执行时间、行数等详细信息。这对于分析查询性能非常有用。

示例:

输出示例:

  • actual time=0.016..0.017:表示实际执行时间,第一个数字是启动时间,第二个数字是总时间。
  • rows=1:表示实际返回的行数。
  • Rows Removed by Filter: 99:表示过滤掉的行数。
  • Planning Time:表示查询计划的生成时间。
  • Execution Time:表示查询的实际执行时间。

3. 使用场景

  • EXPLAIN:用于初步分析查询计划,了解 PostgreSQL 如何执行查询。
  • EXPLAIN ANALYZE:用于深入分析查询性能,获取实际执行时间和行数等详细信息。

4. 注意事项

  • EXPLAIN ANALYZE 会实际执行查询,因此在生产环境中使用时要小心,避免对性能产生影响。
  • 查询计划中的成本(cost)是预估的,可能与实际执行情况有所不同。
纠错
反馈