当前位置:首页 > 数据库 > 正文

怎么查看数据库的执行计划

查看数据库的执行计划,可以使用 EXPLAIN 关键字,在 SQL 查询前加上 EXPLAIN,如 `EXPLAIN SELECT FROM table_name;

数据库管理和优化过程中,查看数据库的执行计划是一项非常重要的任务,执行计划(也称为查询计划或访问计划)是数据库管理系统(DBMS)生成的一个详细步骤列表,描述了如何执行一个SQL查询,通过分析执行计划,可以了解查询的性能瓶颈,并进行相应的优化,以下是如何查看不同数据库系统中执行计划的详细方法。

MySQL

使用 EXPLAIN 关键字

在MySQL中,可以使用 EXPLAIN 关键字来查看SQL查询的执行计划。EXPLAIN 会返回一张表,其中包含了查询执行的详细信息。

示例:

EXPLAIN SELECT  FROM employees WHERE employee_id = 1;

输出示例:
| id | select_type | table | partitions | type | possible_keys | key | key_len | ref | rows | filtered | Extra |
|—-|————-|————|————|——-|—————|————–|———|——|——|———|————————-|
| 1 | SIMPLE | employees | NULL | const | PRIMARY | PRIMARY | 4 | const| 1 | 100.00 | Using where; Using index |

字段解释:

  • id: 查询中每个子查询的唯一标识符。
  • select_type: 查询的类型,如SIMPLE(简单查询)、PRIMARY(主查询)、UNION(联合查询)等。
  • table: 查询的表名。
  • partitions: 查询的分区信息(如果适用)。
  • type: 连接类型,如const、eq_ref、ref、range、index、ALL等。const表示最优,ALL表示全表扫描。
  • possible_keys: 可能使用的索引。
  • key: 实际使用的索引。
  • key_len: 使用索引的长度。
  • ref: 索引列的比较对象。
  • rows: 估计需要读取的行数。
  • filtered: 估计的行过滤比例。
  • Extra: 额外的信息,如Using where、Using index等。

使用 EXPLAIN ANALYZE 关键字

在MySQL 8.0.18及以上版本中,可以使用 EXPLAIN ANALYZE 来获取更详细的执行计划,包括实际执行的时间和行数。

示例:

EXPLAIN ANALYZE SELECT  FROM employees WHERE employee_id = 1;

PostgreSQL

使用 EXPLAIN 关键字

在PostgreSQL中,可以使用 EXPLAIN 关键字来查看SQL查询的执行计划,与MySQL类似,EXPLAIN 会返回一个详细的步骤列表。

示例:

EXPLAIN SELECT  FROM employees WHERE employee_id = 1;

输出示例:

QUERY PLAN
-------------------------------------------------------------------
Seq Scan on employees  (cost=0.00..1.50 rows=1 width=32) (actual time=0.010..0.011 rows=1 loops=1)
   Filter: (employee_id = 1)
   Rows Removed by Filter: 999999
Planning time: 0.067 ms
Execution time: 0.053 ms

字段解释:

  • Seq Scan: 顺序扫描。
  • cost=0.00..1.50: 预计的启动成本和总成本。
  • rows=1: 预计返回的行数。
  • width=32: 每行的字节数。
  • actual time=0.010..0.011: 实际执行时间。
  • Filter: 过滤条件。
  • Rows Removed by Filter: 被过滤掉的行数。
  • Planning time: 查询规划时间。
  • Execution time: 查询执行时间。

使用 EXPLAIN (ANALYZE, BUFFERS, FORMAT JSON) 关键字

在PostgreSQL中,可以使用 EXPLAIN (ANALYZE, BUFFERS, FORMAT JSON) 来获取更详细的执行计划,包括实际执行的时间和行数,以及缓冲区的使用情况。

示例:

EXPLAIN (ANALYZE, BUFFERS, FORMAT JSON) SELECT  FROM employees WHERE employee_id = 1;

SQL Server

使用 DISPLAYPLANSHOWPLAN_ALL

在SQL Server中,可以使用 DISPLAYPLANSHOWPLAN_ALL 来查看SQL查询的执行计划。

示例:

SET SHOWPLAN_ALL ON;
GO
SELECT  FROM employees WHERE employee_id = 1;
GO
SET SHOWPLAN_ALL OFF;
GO

输出示例:

| --Compute Scalar(DEFINE:([Expr1004]=CONVERT_IMPLICIT(int,[employee_id],0)))
    |--Table Spool
        |--Clustered Index Seek(OBJECT:([employees].[PK_employees]), SEEK:([employee_id]=[@1]) ORDERED FORWARD)

使用 Query AnalyzerSQL Server Management Studio (SSMS)

在SQL Server Management Studio (SSMS)中,可以通过点击“显示实际执行计划”按钮来查看查询的执行计划,执行计划会以图形化的方式显示,便于理解。

Oracle

使用 EXPLAIN PLAN 关键字

在Oracle中,可以使用 EXPLAIN PLAN 关键字来查看SQL查询的执行计划,与MySQL和PostgreSQL不同,Oracle的 EXPLAIN PLAN 不会直接返回结果,而是将执行计划存储在一个名为 PLAN_TABLE 的表中。

示例:

EXPLAIN PLAN FOR SELECT  FROM employees WHERE employee_id = 1;
SELECT  FROM TABLE(DBMS_XPLAN.DISPLAY);

输出示例:

| Id | Operation             | Name         | Rows  | Bytes | Cost (%CPU)| Time     |
|----|-----------------------|--------------|-------|-------|-----------|----------|
| 0  | SELECT STATEMENT      |              | 1     | 32    | 2 (100)   | 00:00:01 |
| 1  |  TABLE ACCESS BY INDEX| EMPLOYEES   | 1     | 32    | 2 (100)   | 00:00:01 |
| 2  |   INDEX UNIQUE SCAN   | SYS_C0012345 | 1     |       | 1 (50)    | 00:00:01 |

使用 AUTOTRACE 工具

在Oracle中,可以使用 AUTOTRACE 工具来查看SQL查询的执行计划和统计信息。AUTOTRACE 会自动显示查询的执行计划和统计信息。

示例:

SET AUTOTRACE ON;
SELECT  FROM employees WHERE employee_id = 1;

SQLite

使用 EXPLAIN 关键字

在SQLite中,可以使用 EXPLAIN 关键字来查看SQL查询的执行计划,SQLite的执行计划相对简单,但仍然提供了足够的信息来理解查询的执行过程。

示例:

EXPLAIN SELECT  FROM employees WHERE employee_id = 1;

输出示例:

QUERY PLAN
`--SEARCH TABLE employees USING INDEX employee_id (=?)

查看数据库的执行计划是数据库优化的重要步骤,不同的数据库系统提供了不同的工具和方法来查看执行计划,通过分析执行计划,可以了解查询的性能瓶颈,并进行相应的优化,如添加索引、调整查询结构等,掌握如何查看和分析执行计划,对于数据库管理员和开发人员来说是非常重要的技能。

FAQs

问题1:什么是执行计划?
答:执行计划是数据库管理系统(DBMS)生成的一个详细步骤列表,描述了如何执行一个SQL查询,它包括了查询的各个阶段、使用的索引、估计的行数等信息,通过分析执行计划,可以了解查询的性能瓶颈,并进行相应的优化。

问题2:为什么需要查看执行计划?
答:查看执行计划可以帮助我们了解SQL查询的执行过程,识别性能瓶颈,如全表扫描、索引缺失等,通过分析执行计划,可以优化查询结构、添加或调整索引,从而提高查询性能。

0