推荐答案
EXPLAIN SELECT * FROM employees WHERE department_id = 10; EXPLAIN ANALYZE SELECT * FROM employees WHERE department_id = 10;
EXPLAIN
命令用于显示 PostgreSQL 如何执行查询的查询计划。它不会实际执行查询,而是返回查询的执行计划。EXPLAIN ANALYZE
命令不仅显示查询计划,还会实际执行查询,并返回执行时间、行数等详细信息。
本题详细解读
1. EXPLAIN
命令
EXPLAIN
命令用于查看 PostgreSQL 如何执行 SQL 查询。它返回一个查询计划,显示 PostgreSQL 将如何访问表、使用索引、连接表等。
示例:
EXPLAIN SELECT * FROM employees WHERE department_id = 10;
输出示例:
QUERY PLAN ----------------------------------------------------------- Seq Scan on employees (cost=0.00..10.50 rows=1 width=244) Filter: (department_id = 10)
- Seq Scan:表示 PostgreSQL 将对
employees
表进行顺序扫描。 - cost=0.00..10.50:表示查询的预估成本,第一个数字是启动成本,第二个数字是总成本。
- rows=1:表示预估返回的行数。
- width=244:表示每行的预估宽度(字节数)。
- Filter: (department_id = 10):表示过滤条件。
2. EXPLAIN ANALYZE
命令
EXPLAIN ANALYZE
命令不仅显示查询计划,还会实际执行查询,并返回执行时间、行数等详细信息。这对于分析查询性能非常有用。
示例:
EXPLAIN ANALYZE SELECT * FROM employees WHERE department_id = 10;
输出示例:
QUERY PLAN ----------------------------------------------------------- Seq Scan on employees (cost=0.00..10.50 rows=1 width=244) (actual time=0.016..0.017 rows=1 loops=1) Filter: (department_id = 10) Rows Removed by Filter: 99 Planning Time: 0.045 ms Execution Time: 0.035 ms
- 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)是预估的,可能与实际执行情况有所不同。