本篇內(nèi)容介紹了“Oracle中使用optimizer_mode參數(shù)的意義”的有關(guān)知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領(lǐng)大家學(xué)習(xí)一下如何處理這些情況吧!希望大家仔細(xì)閱讀,能夠?qū)W有所成!

Oracle使用Optimizer_mode參數(shù)來控制優(yōu)化器的偏好,9i常用的幾個參數(shù)有:first_rows,all_rows,first_rows_N,rule
,choose等。而10g少了rule和choose.Oracle 在執(zhí)行SQL語句時,有兩種優(yōu)化方法:即基于規(guī)則的RBO和基于代價的CBO。 在SQL執(zhí)行的時候,到底采用何種優(yōu)化方法,就由Oracle參數(shù) optimizer_mode 來決定。
Rule Based Optimizer(RBO)基于規(guī)則
Cost Based Optimizer(CBO)基于成本,或者講統(tǒng)計信息
SQL> show parameter optimizer_mode;
NAME TYPE VALUE
optimizer_mode string ALL_ROWS
oracle10g開始默認(rèn)是all_rows
ALL_ROWS不管是不是有統(tǒng)計信息,全部采用基于成本的優(yōu)化方法,返回大數(shù)的量數(shù)據(jù)
FIRST_ROWS_n不管是不是有統(tǒng)計信息,全部采用基于成本的優(yōu)化方法并以最快的速度,返回前N行記錄
FIRST_ROWS使用成本和試探法相結(jié)合的方法,查找一種可以最快返回前面少數(shù)行的方法
第一個是返回所有行的最小代價,第二個是返回前N行的最小代價,最后一個是返回前面的少量行的最好計劃
修改全局
alter system set optimizer_mode=all_rows;
修改當(dāng)前session
alter session set optimizer_mode=all_rows;
幾個參數(shù)的具體解釋:
optimizer_mode =choose
這個是Oracle的默認(rèn)值。采用這個值時,Oracle即可以采用基于規(guī)則RBO,也可以采用基于代價的CBO,到底使用那個值,取決于當(dāng)前SQL的被訪問的表中是不是有可以使用的統(tǒng)計信息。如果有多個被訪問的表,其中有一個或多個有統(tǒng)計信息,那么Oralce會對沒有統(tǒng)計信息的表進行采樣統(tǒng)計(即不全部采樣),統(tǒng)計完成后,使用基于代價的優(yōu)化方法CBO。如果所有被訪問的表都沒有統(tǒng)計信息,Oracle就會采用基于規(guī)則的優(yōu)化方法RBO。
Optimizer_mode=First_rows
在oracle 9i之后這一選項已經(jīng)過時,出于向后兼容的目的保留了這一選項,該選項的作用在于尋找能夠在最短的時間內(nèi)返回結(jié)果集的第一行的執(zhí)行計劃。這一規(guī)則傾向于促使優(yōu)化器使用索引訪問路徑,偶爾會出現(xiàn)非常不恰當(dāng)?shù)脑L問路徑。
設(shè)置為這種CBO模式以后,SQL語句返回結(jié)果的速度會盡可能的快,而不管系統(tǒng)全部的查詢是否會耗時較長或者耗系統(tǒng)資源過多。由于利用索引會使查詢速度加快,所以 first_rows 優(yōu)化模式會在全表掃描上進行索引掃描。這種優(yōu)化模式一般適合于一些OLTP系統(tǒng),滿足用戶能夠在較短時間內(nèi)看到較小查詢結(jié)果集的要求。
Optimizer_mode=all_rows
優(yōu)化器將尋找能夠在最短的時間內(nèi)完成語句的執(zhí)行計劃。
設(shè)置為這種CBO模式以后,將保證消耗的所有計算資源最小,盡管有時查詢結(jié)束以后沒有結(jié)果返回。all_rows 的優(yōu)化模式更傾向于全表掃描,而不是全索引掃描和利用索引排序,因此這種優(yōu)化模式適合于數(shù)據(jù)查看實時性不是那么強的數(shù)據(jù)倉庫、決策支持系統(tǒng)和面向批處理的數(shù)據(jù)庫(batch-oriented databases)等。
Optimizer_mode=first_rows_N
N的值可以為1,10,100,1000,優(yōu)化器首先通過徹底分析第一個連接順序來估計返回行的總數(shù)目。這樣就可以知道查詢可能獲得的整個數(shù)據(jù)集的片段,并重新啟動整個優(yōu)化過程,其目標(biāo)在于找到能夠以最小的資源消耗返回整個數(shù)據(jù)片段的執(zhí)行計劃。
Oracle 9i 對一些預(yù)期返回結(jié)果集的數(shù)據(jù)量小的SQL語句優(yōu)化模式進行了加強,增加了四個參數(shù)值:first_rows_1、first_rows_10、 first_rows_100、first_rows_1000。CBO通過first_rows_n 中的 n 值,決定了返回結(jié)果集數(shù)量的基數(shù),我們可能僅僅需要查詢結(jié)果集中的一部分,CBO就根據(jù)這樣的 n 值來決定是否使用索引掃描。
optimizer_mode = rule
基于規(guī)則的優(yōu)化器模式,RBO,是早期Oracle版本使用過的一種優(yōu)化模式。由于 RBO不支持自1994年Oracle版本的新特性,如 bitmap indexes,table partitions,function-based indexes等,所以在以后Oracle版本中已經(jīng)不再更新RBO,并且也不推薦用戶使用RBO這種優(yōu)化模式了。
“Oracle中使用optimizer_mode參數(shù)的意義”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識可以關(guān)注創(chuàng)新互聯(lián)網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實用文章!
另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)cdcxhl.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國服務(wù)器、虛擬主機、免備案服務(wù)器”等云主機租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務(wù)可用性高、性價比高”等特點與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場景需求。
                網(wǎng)頁名稱:Oracle中使用optimizer_mode參數(shù)的意義-創(chuàng)新互聯(lián)
                
                本文地址:http://www.chinadenli.net/article40/idieo.html
            
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供企業(yè)建站、網(wǎng)站設(shè)計、標(biāo)簽優(yōu)化、網(wǎng)站改版、域名注冊、微信小程序
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容
