Oracle執行計划總結


 

 

一、ORACLE中常見執行計划

表訪問的執行計划

1、table access full:全表掃描。它會訪問表中的每一條記錄。

2、table access by user rowid:輸入源rowid來自於用戶指定。

3、table access by index rowid:輸入源rowid來自於索引。

4、table access by global index rowid:全局索引獲取rowid,然后再回表。

5、table access by local index rowid:分區索引獲取rowid,然后再回表。

6、table access cluster:通過索引簇的鍵來訪問索表。

7、external table access:訪問外部表。

8、result cache:結果集可能來自於緩存。

9、mat_view rewrite access:物化視圖。

索引訪問的執行計划

1、index unique scan:只返回一條rowid的索引掃描,或者unique索引的等值掃描。

2、index range scan:返回多條rowid的索引掃描。

3、index full scan:順序掃描整個索引。

4、index fast full scan:多塊讀方式掃描整個索引。

5、index skip scan:多應用於組合索引中,引導鍵值為空的情況下索引掃描。

6、and-equal:合並來自於一個或多個索引的結果集。

7、domain index:應用域索引。

表連接的執行計划

 

表連接的幾種方式:

1、SORT MERGE JOIN(排序-合並連接)

2、NESTED LOOPS(嵌套循環)

3、HASH JOIN(哈希連接)

4、CARTESIAN PRODUCT(笛卡爾積)



 

二、怎樣查看Oracle執行計划

1、plsql Developer中查看

在plsql中:工具  —>  首選項 —>   窗口類型  —>  計划窗口  —>  根據需要配置要顯示在執行計划中的列

執行計划的常用列字段解釋:

基數(Rows):Oracle估計的當前操作的返回結果集行數

字節(Bytes):執行該步驟后返回的字節數

耗費(COST)、CPU耗費:Oracle估計的該步驟的執行成本,用於說明SQL執行的代價,理論上越小越好(該值可能與實際有出入)

時間(Time):Oracle估計的當前操作所需的時間

在SQL窗口執行完一條select語句后按 F5 即可查看剛剛執行的這條查詢語句的執行計划

2、sql命令查看 

(1)explain plan命令

    例子:explain plan for  select * from zyfs.contact_order where rowid = 'AAAU1wADyAAAAFLAAA';

                select * from table(dbms_xplan.display);

(2)sqlplus的autotrace開關    

autotrace開關可以在sqlplus下得到目標sql的執行計划,也可以同時得到目標sql的統計信息。autotrace開關的具體語法如下:

set autotrace {off|on|traceonly} [explain] [statistics]

具體使用方法如下:

(1)set autotrace on:顯示目標sql的執行結果,執行計划和統計信息。

(2)set autotrace off:只顯示目標sql的執行結果,為默認值。

(3)set autotrace traceonly:顯示執行結果數量,執行計划和統計信息。

(4)set autotrace traceonly explain:只顯示目標sql的執行計划。

(5)set autotrace tranceonly statistics:只顯示目標sql的執行結果數量和統計信息。

 

三、看懂執行計划

    執行計划其實是一顆樹,層次最深的先執行,層次相同,上面的先執行。顯示的時候已經按照層次縮進。

    例如:

在plsql工具中有查看順序的按鈕,如上圖紅色圈子。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM