最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會(huì)員登陸 & 注冊(cè)

RBO CBO

2023-05-17 21:39 作者:廢品批發(fā)  | 我要投稿

Oracle中的查詢優(yōu)化器RBO(基于規(guī)則)和CBO(基于代價(jià)).

? ? RBO: Rule-Based Optimization 基于規(guī)則的優(yōu)化器

? ? CBO: Cost-Based Optimization 基于代價(jià)的優(yōu)化器

基于規(guī)則, 就是對(duì)于SQL的使用, 有一套固定的規(guī)則, 無論數(shù)據(jù)怎么變, 只要SQL是按照這一規(guī)則寫的, 就一定是生成相同的執(zhí)行計(jì)劃.

而基于代價(jià)的優(yōu)化器, 當(dāng)我們的數(shù)據(jù)變化時(shí), 即使同樣地SQL寫法, 也有可能出現(xiàn)不同的執(zhí)行策略.

基于規(guī)則的優(yōu)化器在后續(xù)版本中可能不再支持.

舉個(gè)栗子: ?

??? SQL>create table test as select 1 id ,object_name from dba_objects;

? ? Table created.

? ? SQL> create index idx_test on test(id);

? ? Index created.

? ? SQL> update test set id=100 where rownum =1;

? ? 1 row updated.

? ? SQL> select id, count(1) from test group by id;


? ? ? ? ID ? ? COUNT(1)

? ? ---------- ----------

? ? ? ?100 ? ? ? ? ?1

? ? ? ? ?1 ? ? ?50314

可見, 在表中ID=100擁有1條數(shù)據(jù),而ID=1的有5萬多, 而且這個(gè)字段已經(jīng)加上了索引,索引名稱(idx_test).

當(dāng)我們使用RBO模式時(shí),由于走規(guī)則, 無論id=1,id=100,都走范圍索引,id=1的數(shù)據(jù)實(shí)在太多,幾乎每一條都符合謂語條件,走范圍索引只會(huì)增加額外的開銷.

當(dāng)使用CBO模式時(shí),系統(tǒng)會(huì)自動(dòng)選擇代價(jià)較低的方案,如下圖所示,id=1走全表掃描,id=100走區(qū)間索引掃描,一模一樣的語法,卻使用兩種方案,這是CBO對(duì)于SQL執(zhí)行的優(yōu)化.

CBO優(yōu)化器的組件

查詢轉(zhuǎn)化器

等價(jià)的改變查詢語句的形式,以便產(chǎn)生更好的執(zhí)行計(jì)劃。它決定是否重寫用戶的查詢(包括視圖合并、謂詞推進(jìn)、非嵌套子查詢/子查詢反嵌套、物化視圖重寫),以生成更好的查詢計(jì)劃。

代價(jià)評(píng)估器

評(píng)估器通過復(fù)雜的算法結(jié)合來統(tǒng)計(jì)信息的三個(gè)值來評(píng)估各個(gè)執(zhí)行計(jì)劃的總體成本:選擇性(Selectivity)、基數(shù)(Cardinality)、成本(Cost).

計(jì)劃生成器會(huì)考慮可能的訪問路徑(Access Path)、關(guān)聯(lián)方法和關(guān)聯(lián)順序,生成不同的執(zhí)行計(jì)劃,讓查詢優(yōu)化器從這些計(jì)劃中選擇出執(zhí)行代價(jià)最小的一個(gè)計(jì)劃。

計(jì)劃生成器

計(jì)劃生成器就是生成大量的執(zhí)行計(jì)劃,然后選擇其總體代價(jià)或總體成本最低的一個(gè)執(zhí)行計(jì)劃。

由于不同的訪問路徑、連接方式和連接順序可以組合,雖然以不同的方式訪問和處理數(shù)據(jù),但是可以產(chǎn)生同樣的結(jié)果.


查看Oracle優(yōu)化器

修改Oracle優(yōu)化器

Oracle優(yōu)化器可以從系統(tǒng)級(jí)別,會(huì)話級(jí)別,語句級(jí)別修改. ?

?其中optimizer_mode可以選擇的值有: first_rows_n,all_rows. ?其中first_rows_n又有first_rows_1000, first_rows_100, first_rows_10, first_rows_1


在Oracle 9i中,優(yōu)化器模式可以選擇first_rows_n,all_rows, choose, rule 等模式:

????RULE:基于規(guī)則

????CHOOSE:指的是當(dāng)一個(gè)表或或索引有統(tǒng)計(jì)信息,則走CBO的方式,如果表或索引沒統(tǒng)計(jì)信息,表又不是特別的小,而且相應(yīng)的列有索引時(shí),那么就走索引,走RBO的方式。

????FIRST ROWS:它與Choose方式是類似的,所不同的是當(dāng)一個(gè)表有統(tǒng)計(jì)信息時(shí),它將是以最快的方式返回查詢的最先的幾行,從總體上減少了響應(yīng)時(shí)間。

????All Rows: 10g中的默認(rèn)值,也就是我們所說的Cost的方式,當(dāng)一個(gè)表有統(tǒng)計(jì)信息時(shí),它將以最快的方式返回表的所有的行,從總體上提高查詢的吞吐

雖然Oracle 10g中不再支持RBO,Oracle 10g官方文檔關(guān)于optimizer_mode參數(shù)的只有first_rows和all_rows.但是依然可以設(shè)置 optimizer_mode為rule或choose,估計(jì)是ORACLE為了過渡或向下兼容考慮。

系統(tǒng)級(jí)別

會(huì)話級(jí)別修改優(yōu)化器模式,只對(duì)當(dāng)前會(huì)話有效,其它會(huì)話依然使用系統(tǒng)優(yōu)化器模式。

? ? SQL> alter session set optimizer_mode=first_rows_100;




RBO CBO的評(píng)論 (共 條)

分享到微博請(qǐng)遵守國(guó)家法律
枣庄市| 大关县| 长泰县| 新泰市| 临夏市| 河东区| 陵川县| 寿宁县| 普宁市| 泸西县| 龙川县| 秭归县| 贵定县| 青海省| 读书| 克拉玛依市| 隆林| 峨山| 湟中县| 庄浪县| 吉木萨尔县| 肇州县| 西昌市| 永福县| 车致| 永定县| 鄄城县| 岳池县| 西昌市| 垫江县| 克拉玛依市| 武强县| 武汉市| 黄浦区| 油尖旺区| 舞阳县| 舒兰市| 黔南| 中宁县| 贵州省| 陆河县|