解读Oracle执行计划

本篇解释Oracle执行计划中基本项的含义

下面举例进行解释

SQL> explain plan for
  2  select a.name,b.name
  3  from t1 a,t2 b
  4  where a.id=b.id
  5  and a.id='1';

Explained.

SQL> set lines 200
SQL> set pagesize 0
SQL> select * from table(dbms_xplan.display());
Plan hash value: 2680223496

--------------------------------------------------------------------------------------
| Id  | Operation                    | Name  | Rows  | Bytes | Cost (%CPU)| Time    |
--------------------------------------------------------------------------------------
|  0 | SELECT STATEMENT            |      |    1 |    20 |    5  (0)| 00:00:01 |
|  1 |  NESTED LOOPS                |      |    1 |    20 |    5  (0)| 00:00:01 |
|  2 |  TABLE ACCESS BY INDEX ROWID| T1    |    1 |    10 |    1  (0)| 00:00:01 |
|*  3 |    INDEX UNIQUE SCAN        | T1_PK |    1 |      |    0  (0)| 00:00:01 |
|*  4 |  TABLE ACCESS FULL          | T2    |    1 |    10 |    4  (0)| 00:00:01 |
--------------------------------------------------------------------------------------

Predicate Information (identified by operation id):
---------------------------------------------------

  3 - access("A"."ID"=1)
  4 - filter("B"."ID"=1)

17 rows selected.

对于Oracle执行计划,并列的行从上往下执行,非并列的行,靠右的先执行。

例如本例中:

id为3的操作最靠右,所以最先执行,其次是id为2和4的操作较靠右,而且并列,那么按照并列从上往下执行的原则,id为2的操作比id为4的操作先执行。

然后执行id为1的操作。

那么本例中执行计划按id排序为 3>2>4>1

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

本例中使用的DBMS_XPLAY显示的执行计划,其中:

id:为每个操作的唯一序列号,

operation:为每个操作的名称和方式,

name:是操作对象

Rows:Oracle估算当前操作影响的行数

bytes:Oracle估算当前操作的影响的数据量(单位byte)

Cost:Oracle计算出来的执行该操作的代价

Time:Oracle估算出来的该操作花费的时间

相关推荐