優化器
rbo/cbo
oracle
的優化器有兩種優化方式
,即基於規則的優化方式
(rule-based optimization
,簡稱為
rbo)
和基於代價的優化方式
(cost-based optimization
,簡稱為
cbo)
,在oracle8
及以後的版本
,oracle
強列推薦用
cbo的方式。
rbo方式:優化器在分析
sql語句時
,所遵循的是
oracle
內部預定的一些規則。比如我們常見的,當乙個
where
子句中的一列有索引時去走索引。
cbo方式:它是看語句的代價
(cost),
這裡的代價主要指
cpu和記憶體。優化器在判斷是否用這種方式時
,主要參照的是表及索引的統計資訊。統計資訊給出表的大小、有少行、每行的長度等資訊。這些統計資訊起初在庫內是沒有的,是做
analyze
命令後才出現的,很多的時侯過期統計資訊會令優化器做出乙個錯誤的執行計畫
,因些應及時更新這些資訊。
注意:走索引不一定就是優的,比如乙個表只有兩行資料,一次
io就可以完成全表的檢索
,而此時走索引時則需要兩次
io,這時全表掃瞄
(full table scan)
是最好oracle
優化模式包括:
rule,choose, first_rows,all_rows
,設定預設的優化器
,可以通過對
init.ora
檔案中optimizer_mode
引數的各種宣告
rule
:基於規則的方式,不推薦使用者使用
rbo這種優化模式
choose
:這個是
oracle
的預設值。當乙個表或索引有統計資訊,則走
cbo的方式,如果表或索引沒有統計資訊,表又不是特別的小,而且相應的列有索引時,那麼就走索引,走
rbo的方式
first_rows
:該選項的作用在於尋找能夠在最短的時間內返回結果集的第一行的執行計畫。設定為這種
cbo模式以後,
sql語句返回結果的速度會盡可能的快,而不管系統全部的查詢是否會耗時較長或者耗系統資源過多。由於利用索引會使查詢速度加快,所以
first_rows
優化模式會在全表掃瞄上進行索引掃瞄。這種優化模式一般適合於一些
oltp
(聯機事務處理系統
)系統,滿足使用者能夠在較短時間內看到較小
查詢結果集的要求。
all_rows
:優化器將尋找能夠在最短的時間內完成語句的執行計畫。設定為這種
cbo模式以後,將保證消耗的所有計算資源最小,儘管有時查詢結束以後沒有結果返回。
all_rows
的優化模式更傾向於全表掃瞄,而不是全索引掃瞄和利用索引排序,因此這種優化模式適合於資料檢視實時性不是那麼強的資料倉儲、決策支援系統和面向批處理的資料庫(
batch-oriented databases
)等。
1 選用適合的ORACLE優化器
oracle 的優化器共有3種 a.rule 基於規則 b.cost 基於成本 c.choose 選擇性 設定預設的優化器 可以通過對 init.ora 檔案中optimizer mode 引數的各種宣告,如 rule,cost,choose,all rows,first rows 你當然也在 sq...
C 手動開O2優化
本文 感謝博主讓我漲姿勢,蟹蟹!o1優化會消耗少多的編譯時間,它主要對 的分支,常量以及表示式等進行優化。o2會嘗試更多的暫存器級的優化以及指令級的優化,它會在編譯期間占用更多的記憶體和編譯時間。o3在o2的基礎上進行更多的優化,例如使用偽暫存器網路,普通函式的內聯,以及針對迴圈的更多優化。os主要...
手動開上O2優化(c )
o2優化能使程式的編譯效率大大提公升 從而減少程式的執行時間,達到優化的效果。原理 該優化選項會犧牲部分編譯速度,除了執行 o1所執行的所有優化之外,還會採用幾乎所有的目標配置支援的優化演算法,用以提高目標 的執行速度。on n 0,1,2,3,也可以是其它單詞 是gcc為了一般人方便而做的設定,根...