Oracle執行計劃
轉載: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執行計劃