1. 程式人生 > >Oracle執行計劃

Oracle執行計劃

sele 部分 支持 htm 工具 查看 image info .cn

轉載:https://www.cnblogs.com/Dreamer-1/p/6076440.html

一:什麽是Oracle執行計劃?

執行計劃是一條查詢語句在Oracle中的執行過程或訪問路徑的描述

二:怎樣查看Oracle執行計劃?

因為我一直用的PLSQL遠程連接的公司數據庫,所以這裏以PLSQL為例:

①:配置執行計劃需要顯示的項:

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

技術分享圖片

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

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

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

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

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

②:打開執行計劃:

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

技術分享圖片

註:在PLSQL中使用SQL命令查看執行計劃的話,某些SQL*PLUS命令PLSQL無法支持,比如SET AUTOTRACE ON

技術分享圖片

三:看懂Oracle執行計劃

技術分享圖片

①:執行順序:

根據Operation縮進來判斷,縮進最多的最先執行;(縮進相同時,最上面的最先執行)

例:上圖中 INDEX RANGE SCAN 和 INDEX UNIQUE SCAN 兩個動作縮進最多,最上面的 INDEX RANGE SCAN 先執行;

同一級如果某個動作沒有子ID就最先執行

同一級的動作執行時遵循最上最右先執行的原則

例:上圖中 TABLE ACCESS BY GLOBAL INDEX ROWID 和 TABLE ACCESS BY INDEX ROWID 兩個動作縮進都在同一級,則位於上面的 TABLE ACCESS BY GLOBAL INDEX ROWID 這個動作先執行;這個動作又包含一個子動作 INDEX RANGE SCAN,則位於右邊的子動作 INDEX RANGE SCAN 先執行;

圖示中的SQL執行順序即為:

INDEX RANGE SCAN —> TABLE ACCESS BY GLOBAL INDEX ROWID —> INDEX UNIQUE SCAN —> TABLE ACCESS BY INDEX ROWID —> NESTED LOOPS OUTER —> SORT GROUP BY —> SELECT STATEMENT, GOAL = ALL_ROWS

( 註:PLSQL提供了查看執行順序的功能按鈕(上圖中的紅框部分) )

Oracle執行計劃