(1)什麼是執行計劃
SQL是一種傻瓜式語言,每一個條件就是一個需求,通路的順序不同就形成了不同的執行計劃。Oracle必須做出選擇,一次隻能有一種通路路徑。執行計劃是一條查詢語句在Oracle中的執行過程或通路路徑的描述。
(2)執行計劃的選擇通常一條SQL有多個執行計劃,那我們如何選擇?那種執行開銷更低,就意味着性能更好,速度更快,我們就選哪一種,這個過程叫做Oracle的解析過程,然後Oracle會把更好的執行計劃放到SGA的Shared Pool裡,後續再執行同樣的SQL隻需在Shared Pool裡擷取就行了,不需要再去分析。
(3)執行計劃標明依據根據統計資訊來選擇執行計劃。
(4)統計資訊
什麼是統計資訊: 記錄數、塊數等,具體檢視dba_tables / dba_indexes
(5)動态采樣Oracle正常情況下會在每天的某段時間收集統計資訊,對于建立的表,Oracl如何收集統計資訊?采用動态采樣。
set autotrace on
set linesize 1000
--執行SQL語句
--會出現dynamic sampling used for this statement(level=2)關鍵
(一)六種執行計劃Oracle提供了6種執行計劃擷取方法,各種方法側重點不同:選擇時一般遵循以下規則:
1.如果sql執行很長時間才出結果或傳回不了結果,用方法1:explain plan for
2.跟蹤某條sql最簡單的方法是方法1:explain plan for,其次是方法2:set autotrace on
3.如果相關察某個sql多個執行計劃的情況,隻能用方法4:dbms_xplan.display_cursor或方法6:awrsqrpt.sql
4.如果sql中含有函數,函數中有含有sql,即存在多層調用,想準确分析隻能用方法5:10046追蹤
5.想法看到真實的執行計劃,不能用方法1:explain plan for和方法2:set autotrace on
6.想要擷取表被通路的次數,隻能用方法3:statistics_level = all