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

執行計划sql查看

 

 

 

三:看懂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提供了查看執行順序的功能按鈕(上圖中的紅框部分) )


免責聲明!

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



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