1、解释计划
当使用explain plan来为一个查询生成预期的执行计划时,输出将包括一下几种:
SQL访问的每一张表;
访问每张表的方法;
每一个需要联结的数据源所使用的联结方法;
按次序列出的所有需要完成的运算;
计划中各步骤的谓语列表信息等等
explain plan for
?select t1.name, t2.grade
? from table1 t1
? left join table2 t2
? on t1.id = t2.id
? where t1.id =704
;
Explained
查询得:(与谓语有关的运算都会有*号标注)
select * from table(dbms_xplan.display);
PLAN_TABLE_OUTPUT
--------------------------------------------------------------------------------
Plan hash value: 2814340807
--------------------------------------------------------------------------------
| Id? | Operation? ? ? ? ? ? ? ? ? ? | Name? ? ? ? ? ? | Rows? | Bytes | Cost (%
--------------------------------------------------------------------------------
|? 0 | SELECT STATEMENT? ? ? ? ? ? |? ? ? ? ? ? ? ? |? ? 1 |? 141 |? ? 8
|*? 1 |? HASH JOIN OUTER? ? ? ? ? ? |? ? ? ? ? ? ? ? |? ? 1 |? 141 |? ? 8
|? 2 |? TABLE ACCESS BY INDEX ROWID| TABLE1? ? ? ? ? |? ? 1 |? 115 |? ? 2
|*? 3 |? ? INDEX RANGE SCAN? ? ? ? ? | INDEX_TABLE1_ID |? ? 1 |? ? ? |? ? 1
|*? 4 |? TABLE ACCESS FULL? ? ? ? ? | TABLE2? ? ? ? ? |? ? 1 |? ? 26 |? ? 5
--------------------------------------------------------------------------------
Predicate Information (identified by operation id):
---------------------------------------------------
? 1 - access("T1"."ID"="T2"."ID"(+))
? 3 - access("T1"."ID"=704)
? 4 - filter("T2"."ID"(+)=704)
Note
?
PLAN_TABLE_OUTPUT
--------------------------------------------------------------------------------
? - dynamic sampling used for this statement (level=2)
22 rows selected
2、系统解释计划表的内容
desc plan_table
Name? ? ? ? ? ? ? Type? ? ? ? ? Nullable Default Comments
----------------- -------------- -------- ------- --------
STATEMENT_ID? ? ? VARCHAR2(30)? Y? ? ? ? ? ? ? ? ? ? ? ?
PLAN_ID? ? ? ? ? NUMBER? ? ? ? Y? ? ? ? ? ? ? ? ? ? ? ?
TIMESTAMP? ? ? ? DATE? ? ? ? ? Y? ? ? ? ? ? ? ? ? ? ? ?
REMARKS? ? ? ? ? VARCHAR2(4000) Y? ? ? ? ? ? ? ? ? ? ? ?
OPERATION? ? ? ? VARCHAR2(30)? Y? ? ? ? ? ? ? ? ? ? ? ?
OPTIONS? ? ? ? ? VARCHAR2(255)? Y? ? ? ? ? ? ? ? ? ? ? ?
OBJECT_NODE? ? ? VARCHAR2(128)? Y? ? ? ? ? ? ? ? ? ? ? ?
OBJECT_OWNER? ? ? VARCHAR2(30)? Y? ? ? ? ? ? ? ? ? ? ? ?
OBJECT_NAME? ? ? VARCHAR2(30)? Y? ? ? ? ? ? ? ? ? ? ? ?
OBJECT_ALIAS? ? ? VARCHAR2(65)? Y? ? ? ? ? ? ? ? ? ? ? ?
OBJECT_INSTANCE? INTEGER? ? ? ? Y? ? ? ? ? ? ? ? ? ? ? ?
OBJECT_TYPE? ? ? VARCHAR2(30)? Y? ? ? ? ? ? ? ? ? ? ? ?
OPTIMIZER? ? ? ? VARCHAR2(255)? Y? ? ? ? ? ? ? ? ? ? ? ?
SEARCH_COLUMNS? ? NUMBER? ? ? ? Y? ? ? ? ? ? ? ? ? ? ? ?
ID? ? ? ? ? ? ? ? INTEGER? ? ? ? Y? ? ? ? ? ? ? ? ? ? ? ?
PARENT_ID? ? ? ? INTEGER? ? ? ? Y? ? ? ? ? ? ? ? ? ? ? ?
DEPTH? ? ? ? ? ? INTEGER? ? ? ? Y? ? ? ? ? ? ? ? ? ? ? ?
POSITION? ? ? ? ? INTEGER? ? ? ? Y? ? ? ? ? ? ? ? ? ? ? ?
COST? ? ? ? ? ? ? INTEGER? ? ? ? Y? ? ? ? ? ? ? ? ? ? ? ?
CARDINALITY? ? ? INTEGER? ? ? ? Y? ? ? ? ? ? ? ? ? ? ? ?
BYTES? ? ? ? ? ? INTEGER? ? ? ? Y? ? ? ? ? ? ? ? ? ? ? ?
OTHER_TAG? ? ? ? VARCHAR2(255)? Y? ? ? ? ? ? ? ? ? ? ? ?
PARTITION_START? VARCHAR2(255)? Y? ? ? ? ? ? ? ? ? ? ? ?
PARTITION_STOP? ? VARCHAR2(255)? Y? ? ? ? ? ? ? ? ? ? ? ?
PARTITION_ID? ? ? INTEGER? ? ? ? Y? ? ? ? ? ? ? ? ? ? ? ?
OTHER? ? ? ? ? ? LONG? ? ? ? ? Y? ? ? ? ? ? ? ? ? ? ? ?
OTHER_XML? ? ? ? CLOB? ? ? ? ? Y? ? ? ? ? ? ? ? ? ? ? ?
DISTRIBUTION? ? ? VARCHAR2(30)? Y? ? ? ? ? ? ? ? ? ? ? ?
CPU_COST? ? ? ? ? INTEGER? ? ? ? Y? ? ? ? ? ? ? ? ? ? ? ?
IO_COST? ? ? ? ? INTEGER? ? ? ? Y? ? ? ? ? ? ? ? ? ? ? ?
TEMP_SPACE? ? ? ? INTEGER? ? ? ? Y? ? ? ? ? ? ? ? ? ? ? ?
ACCESS_PREDICATES VARCHAR2(4000) Y? ? ? ? ? ? ? ? ? ? ? ?
FILTER_PREDICATES VARCHAR2(4000) Y? ? ? ? ? ? ? ? ? ? ? ?
PROJECTION? ? ? ? VARCHAR2(4000) Y? ? ? ? ? ? ? ? ? ? ? ?
TIME? ? ? ? ? ? ? INTEGER? ? ? ? Y? ? ? ? ? ? ? ? ? ? ? ?
QBLOCK_NAME? ? ? VARCHAR2(30)? Y?
?其中常用字段说明

创建自己的解释计划
?结果为
通过查看解释计划,可以针对性的修改自己的SQL语句来提升效率。比如修改或者增加索引等等
查看执行计划与此相似,可以通过dbms.display_cursor函数来查看,也可以通过查询V$SQL_PLAN_STATISTICS_ALL中的相关字段来查看。