Oracle 执行计划(Explain Plan)说明(一)

2014-11-24 18:28:58 · 作者: · 浏览: 0


看懂执行计划也就成了SQL优化的先决条件。 这里的SQL优化指的是SQL性能问题的定位,定位后就可以解决问题。




一. 查看执行计划的三种方法


1.1 设置autotrace



SQL> set autotrace on


SQL> select * from dave;


ID NAME


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


8 安庆


1 dave


2 bl


1 bl


2 dave


3 dba


4 sf-express


5 dmm



已选择8行。



执行计划


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


Plan hash value: 3458767806


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


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


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


| 0 | SELECT STATEMENT | | 8 | 64 | 2 (0)| 00:00:01 |


| 1 | TABLE ACCESS FULL| DAVE | 8 | 64 | 2 (0)| 00:00:01 |


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



统计信息


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


0 recursive calls


0 db block gets


4 consistent gets


0 physical reads


0 redo size


609 bytes sent via SQL*Net to client


416 bytes received via SQL*Net from client


2 SQL*Net roundtrips to/from client


0 sorts (memory)


0 sorts (disk)


8 rows processed



SQL>



1.2 使用SQL


SQL>EXPLAIN PLAN FOR sql语句;


SQL>SELECT plan_table_output FROM TABLE(DBMS_XPLAN.DISPLAY('PLAN_TABLE'));



示例:


SQL> EXPLAIN PLAN FOR SELECT * FROM DAVE;


已解释。


SQL> SELECT plan_table_output FROM TABLE(DBMS_XPLAN.DISPLAY('PLAN_TABLE'));


或者:


SQL> select * from table(dbms_xplan.display);


PLAN_TABLE_OUTPUT


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


Plan hash value: 3458767806



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


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


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


| 0 | SELECT STATEMENT | | 8 | 64 | 2 (0)| 00:00:01 |


| 1 | TABLE ACCESS FULL| DAVE | 8 | 64 | 2 (0)| 00:00:01 |


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


已选择8行。


执行计划


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


Plan hash value: 2137789089


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


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


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


| 0 | SELECT STATEMENT | | 8168 | 16336 | 29 (0)| 00:00:01 |


| 1 | COLLECTION ITERATOR PICKLER FETCH| DISPLAY | 8168 | 16336 | 29 (0)| 00:00:01 |


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



统计信息


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


25 recursive calls


12 db block gets


168 consistent gets


0 physical reads


0 redo size


974 bytes sent via SQL*Net to client


416 bytes received via SQL*Net from client


2 SQL*Net roundtrips to/from client


1 sorts (memory)


0 sorts (disk)


8 rows processed


SQL>



1.3 使用Toad,PL/SQL Developer工具




二. Cardinality(基数)/ rows



这是9i的一个执行计划,我们可以看到关键字Card


执行计划


--------