Oracle最佳化器(RBO與CBO)
Oracle的最佳化器有兩種,基於規則的最佳化器(RBO)和基於代價的最佳化器(CBO)。
在8i之前,Oracle使用的是RBO(Rule Based Optimizer,基於規則的最佳化器),他的執行非常簡單,就是在最佳化器裡面嵌入15中規則,執行SQL語句符合哪種規則,就按照規則定製出相應的SQL執行計劃。由於他是一種過時呆板的最佳化器,在10g以後的版本中已經被踢出掉了。
從8i開始,Oracle引入了CBO(Cost Based Optimizer,基於代價的最佳化器),他的思路是讓Oracle獲取所有的執行計劃的相關資訊,透過這些資訊做計算分析,最後得出一個代價最小的執行計劃作為最終的執行計劃。
CBO最佳化器有兩種可選的執行模式:
FIRST_ROWS(n)
ALL_ROWS
當設定最佳化器模式為:FIRST_ROWS(n)時,意味著Oracle在執行SQL語句時,優先考慮將結果集中的前n條記錄以最快的速度反饋回來,而其他結果並不需要同事反饋,也就是說在處理資料的時候,後面的資料可能還沒提取出來,前面的資料已經返回給使用者了,這種需求在網站搜尋或者BBS的分頁上經常看到。比如每次只顯示查詢資訊的前20條,這時設定FIRST_ROWS(20)就非常合適。對於分頁操作,越靠前的頁,顯示結果需要的時間將越短。
下面舉一個典型的分頁的例子:
idle> select /*+first_rows(10)*/ b.x,b.y
2 from (select /*+first_rows(10)*/ a.*,rownum
3 from (select /*+first_rows(10)*/ from t order by x) a
4 where rownum<=20) b
5 where rownum>=10;
需要注意的是排序使用的X必須建立有索引,否則CBO會忽略FIRST_ROWS(n)而使用ALL_ROWS.
CBO的模式為ALL_ROWS時,意味著我們需要Oracle以最快的速度將SQL執行完畢,將結果集全部返回。它和FIRST_ROWS(n)的區別在於,ALL_ROWS強調整體的執行效率,而FIRST_ROWS(n)強調以最快的速度返回前n條記錄。ALL_ROWS在OLAP系統中使用的比較多,它的目的在於快速獲取執行結果的最後一條記錄。
可以透過下面語句修改optimizer_mode
alter system set optimizer_mode=all_rows scope=both;
[@more@]來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/223653/viewspace-1775692/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Oracle CBO 與 RBOOracle
- Oracle優化器(RBO與CBO)Oracle優化
- Oracle最佳化器RBO和CBO(轉載)Oracle
- Oracle的最佳化器的RBO和CBO方式Oracle
- 詳介oracle的RBO/CBO最佳化器 - 轉Oracle
- Oracle Optimizer CBO RBOOracle
- ORACLE優化器RBO與CBO介紹總結Oracle優化
- Oracle優化器的RBO和CBO方式Oracle優化
- Oracle的優化器的RBO和CBO方式Oracle優化
- 簡單介紹Oracle的RBO/CBO優化器Oracle優化
- CBO,RBO在ORACLE中的應用Oracle
- CBO RBO簡介
- SQL優化器-RBO與CBO分別是什麼SQL優化
- 【效能優化】CBO,RBO在ORACLE中的應用優化Oracle
- 【效能優化】CBO,RBO在ORACLE 10g 中的應用優化Oracle 10g
- Oracle的優化器:RBO/CBO,RULE/CHOOSE/FIRST_ROWS/ALL_ROWS 名詞解釋Oracle優化
- Oracle "腦殘" CBO 最佳化案例Oracle
- Oracle:RBOOracle
- Oracle Optimizer -RBO (理解Rule-based 優化器)Oracle優化
- CBO_ORACLEOracle
- Oracle Optimizer -RBO (理解Rule-based 優化器)【Blog 搬家】Oracle優化
- ORACLE 10G不再SUPPORT RBOOracle 10g
- SQL效能的度量 - CBO最佳化方式SQL
- ORACLE最佳化器Oracle
- 基於CBO最佳化器謂詞選擇率的計算方法
- Spark SQL / Catalyst 內部原理 與 RBOSparkSQL
- Oracle 最佳化器與sql查詢執行順序OracleSQL
- Oracle約束Constraint對於CBO優化器的作用OracleAI優化
- Oracle筆記-最佳化策略與工具Oracle筆記
- oracle聯合索引在CBO下的分析Oracle索引
- CBO與動態統計量取樣
- 【sql調優】繫結變數與CBOSQL變數
- oracle基於cbo成本計算方式說明Oracle
- 理解CBO
- Oracle學習系列—資料庫優化—RBO訪問路徑Oracle資料庫優化
- 說一說Oracle的最佳化器(Optimizer) (轉)Oracle
- 【cbo計算公式】CBO基本概念(一)公式
- 關於ORACLE自動統計CBO統計資訊Oracle