程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> Oracle數據庫 >> Oracle教程 >> 創建自己的oracle解釋計劃,oracle解釋計劃

創建自己的oracle解釋計劃,oracle解釋計劃

編輯:Oracle教程

創建自己的oracle解釋計劃,oracle解釋計劃


 

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   

 其中常用字段說明

創建自己的解釋計劃

 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; 

  結果為

                                     ID                               PARENT_ID OPERATION
--------------------------------------- --------------------------------------- -----------------------------------------
                                      0                                          SELECT STATEMENT
                                      1                                       0   HASH JOIN OUTER
                                      2                                       1    TABLE ACCESS BY INDEX ROWID TABLE1
                                      3                                       2     INDEX RANGE SCAN INDEX_TABLE1_ID
                                      4                                       1    TABLE ACCESS FULL TABLE2

通過查看解釋計劃,可以針對性的修改自己的SQL語句來提升效率。比如修改或者增加索引等等

查看執行計劃與此相似,可以通過dbms.display_cursor函數來查看,也可以通過查詢V$SQL_PLAN_STATISTICS_ALL中的相關字段來查看。

  

  

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved