查看Oracle执行计划的方法

1. 什么是执行计划

在对Oracle数据库进行查询优化时,查询执行计划是一种非常重要的工具。执行计划是指Oracle数据库在执行SQL语句时,所采用的具体执行方式。它由Oracle数据库自行生成,是数据库优化的重要参考依据。

1.1 执行计划的作用

执行计划可以展示出Oracle在执行SQL语句时所使用的具体查询路径,包含了哪些操作符以及这些操作符的执行先后顺序,对查询优化非常重要。

1.2 执行计划中的重要参数

在执行计划中,有几个重要的参数需要注意:

Rows:指返回的行数

Cost:指此SQL语句执行所消耗的资源成本,成本越低SQL语句执行速度越快

Operation:指操作符,如Table Access Full、Index Unique Scan等等。

Cardinality:指行的数量估计值,它与Rows有关,但Cardinality是在执行计划生成前进行优化时的一个预估值,而Rows是真正的返回值。

2. 查看执行计划的方法

Oracle提供了多种方式查看执行计划,以下是其中的常用方法:

2.1 使用EXPLAIN PLAN命令

在Oracle中可以使用EXPLAIN PLAN命令来生成SQL语句的执行计划:

EXPLAIN PLAN FOR 

SELECT * FROM employees WHERE salary > 6000;

执行完成后,可以使用以下命令来查看执行计划:

SELECT * FROM TABLE(DBMS_XPLAN.DISPLAY);

执行结果如下图所示:

2.2 使用AUTOTRACE命令

AUTOTRACE是Oracle提供的另一种查看执行计划的方式。使用AUTOTRACE需要在SQL*Plus中执行SQL语句:

SET AUTOTRACE ON;

SELECT * FROM employees WHERE salary > 6000;

SET AUTOTRACE OFF;

执行完成后,可以看到类似以下的输出结果:

Execution Plan

----------------------------------------------------------

Plan hash value: 1545031912

----------------------------------------------------------------------------------

| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |

----------------------------------------------------------------------------------

| 0 | SELECT STATEMENT | | 1029 | 54627 | 3 (0)| 00:00:01 |

| 1 | TABLE ACCESS FULL| EMPLOYEES| 1029 | 54627 | 3 (0)| 00:00:01 |

----------------------------------------------------------------------------------

Statistics

----------------------------------------------------------

1 recursive calls

0 db block gets

4 consistent gets

1 physical reads

0 redo size

1682 bytes sent via SQL*Net to client

592 bytes received via SQL*Net from client

4 SQL*Net roundtrips to/from client

0 sorts (memory)

0 sorts (disk)

9 rows processed

AUTOTRACE的执行计划与EXPLAIN PLAN有些许不同,但主要内容是相同的。

2.3 使用SQL Developer工具查看

在Oracle SQL Developer工具中,可以通过以下几个步骤查看执行计划:

在SQL编辑器中输入要执行的SQL语句

点击工具栏中的绿色三角形运行按钮

在SQL执行结果的下方展示面板中,点击“Execution Plan”选项卡

如下图所示:

3. 如何优化SQL查询

通过查看执行计划,我们可以了解SQL查询在执行过程中的具体情况,然后根据执行计划对查询进行优化,以获得更好的查询性能。以下提供一些常用的查询优化方法:

3.1 索引优化

在SQL查询中常用的索引包括B-tree索引、位图索引、哈希索引等。通过创建索引来加快查询速度,但同时也可能影响INSERT/UPDATE/DELETE等操作的性能。

一些常用的索引优化方法:

针对SQL查询的性质对表进行分区,采用不同的索引类型

禁用无用的索引

优化索引的列选择以及列顺序

3.2 SQL语句优化

在SQL查询中,一些简单的优化方法可以大大提升查询速度:

使用与操作无关的操作符(如!=代替<>)

使用子查询代替JOIN语句

使用连接代替子查询

使用单引号或者双引号

避免在WHERE语句中使用函数

3.3 表结构优化

在表结构设计中,也有一些优化方法可以提高查询速度:

避免使用大型文本字段(如BLOB/CLOB)

选择正确的存储方式(如RAW/BLOB)

避免使用过多的空值

把数据类型尽量选择得小一点

总结

在开发Oracle数据库的时候,可以通过观察SQL语句的执行计划,根据执行计划对SQL语句进行优化,达到更好的查询性能。通过调整索引、优化SQL语句、优化表结构等手段,可以使得查询速度更快。

数据库标签