创建自己的Oracle解释计划

当使用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 

其中常用字段说明

创建自己的Oracle解释计划

创建自己的解释计划

select id,parent_id,

              lpad(' ',level)||operation||' ' ||options||' '||object_name as operation

  from plan_table

  start with id=0

  connect by prior id = parent_id; 

结果为

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/59470bb24ed4977ff88c78afe5778f82.html