共享池之七:執行計劃的生成過程

還不算暈發表於2014-03-17

--------未完待續

生成執行計劃的過程:編譯器:分為三部分:

2.優化器:--包括三個部分

查詢轉換器RBO-->CBO,目前是CBO ,optimizer_mode--ALL_ROWS引數值,適合OLTP。FIRST_ROWS_N適合分頁,OLAP。

 

查詢轉化器:

檢視合併--檢視時直接用檢視SQL語句對應表做基表進行連線。

謂詞推進,子查詢非巢狀化--相關子查詢;OR--UNION合併

 

成本估算器:

拿資料字典裡統計資訊,主要有:

表:dba_tab_statistics --行數,塊數

表中欄位:dba_tab_col_statistics --選擇率 selectivity  欄位:number_distinct

索引:dba_ind_statistics  葉塊 高度 聚簇因子

系統評估:CPU IO

資料字典本身:tab$,obj$,col$,con$

內部表:x$bh,x$ksmsp

 

計劃生成器:訪問路徑--索引OR全表掃描,表連線的型別、順序和方法

 Oracle根據提交的SQL語句再查詢相應的資料物件是否有統計資訊。如果有統計資訊的話,那麼CBO將會使用這些統計資訊產生所有可能的執行計劃(可能多達成千上萬個)和相應的Cost,最終選擇Cost最低的那個執行計劃。如果查詢的資料物件無統計資訊,則按RBO的預設規則選擇相應的執行計劃。這個步驟也是解析中最耗費資源的,因此我們應該極力避免硬解析的產生。

3.行源生成器:執行函式--對應執行計劃中

 

4.執行引擎:

 至此,解析的步驟已經全部完成,Oracle將會根據解析產生的執行計劃執行SQL語句和提取相應的資料。

相關文章