一、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工具中有查看順序的按鈕,如上圖紅色圈子。