欧美一区二区三区老妇人-欧美做爰猛烈大尺度电-99久久夜色精品国产亚洲a-亚洲福利视频一区二区

CBO如何選擇相同cost的索引

ACOUG年會(huì)楊長老的演講中,曾提到一個(gè)問題,

成都創(chuàng)新互聯(lián)公司服務(wù)項(xiàng)目包括青云譜網(wǎng)站建設(shè)、青云譜網(wǎng)站制作、青云譜網(wǎng)頁制作以及青云譜網(wǎng)絡(luò)營銷策劃等。多年來,我們專注于互聯(lián)網(wǎng)行業(yè),利用自身積累的技術(shù)優(yōu)勢、行業(yè)經(jīng)驗(yàn)、深度合作伙伴關(guān)系等,向廣大中小型企業(yè)、政府機(jī)構(gòu)等提供互聯(lián)網(wǎng)行業(yè)的解決方案,青云譜網(wǎng)站推廣取得了明顯的社會(huì)效益與經(jīng)濟(jì)效益。目前,我們服務(wù)的客戶以成都為中心已經(jīng)輻射到青云譜省份的部分城市,未來相信會(huì)繼續(xù)擴(kuò)大服務(wù)區(qū)域并繼續(xù)獲得客戶的支持與信任!

一條SQL語句,兩種執(zhí)行計(jì)劃的cost值相同,CBO是如何選擇執(zhí)行計(jì)劃?

翻譯一下問題,創(chuàng)建測試表數(shù)據(jù),

SQL> create table z (a number, b number);
Table created.

SQL> begin 
  2    for i in 1 .. 10000 loop
  3      insert into z values(i, i);
  4    end loop;
  5    commit;
  6  end;
  7  /
PL/SQL procedure successfully completed.

SQL> create index idx_z_01 on z(a);
Index created.

SQL> create index idx_z_02 on z(b);
Index created.

SQL> exec dbms_stats.gather_table_stats('BISAL', 'Z', cascade=>true);
PL/SQL procedure successfully completed.

對于以下SQL,

select * from z where a=1 and b=1;

根據(jù)10053顯示,可以看出,IDX_Z_01和IDX_Z_02這兩個(gè)索引,cost相同,CBO會(huì)選擇何種執(zhí)行計(jì)劃?

注:關(guān)于10053介紹,可以參考《 探索索引的奧秘 - 10053事件 》

Index Stats::
  Index: IDX_Z_01  Col#: 1
    LVLS: 1  #LB: 20  #DK: 10000  LB/K: 1.00  DB/K: 1.00  CLUF: 18.00
  Index: IDX_Z_02  Col#: 2
    LVLS: 1  #LB: 20  #DK: 10000  LB/K: 1.00  DB/K: 1.00  CLUF: 18.00

Access Path: index (AllEqRange)
    Index: IDX_Z_01
    resc_io: 2.00  resc_cpu: 14613
    ix_sel: 0.000100  ix_sel_with_filters: 0.000100
    Cost: 2.00  Resp: 2.00  Degree: 1
  Access Path: index (AllEqRange)
    Index: IDX_Z_02
    resc_io: 2.00  resc_cpu: 14613
    ix_sel: 0.000100  ix_sel_with_filters: 0.000100
    Cost: 2.00  Resp: 2.00  Degree: 1

楊長老提到dbsnake曾經(jīng)寫過,檢索了下,有一篇文章介紹,

《CBO對于Cost值相同的索引的選擇》

http://www.dbsnake.net/handle-equally-costed-indexes.html

文章總結(jié)來講,

對于Oracle 10gR2及其以上的版本,CBO對于Cost值相同的索引的選擇實(shí)際上會(huì)這樣:

1. 如果Cost值相同的索引的葉子塊數(shù)量不同,則Oracle會(huì)選擇葉子塊數(shù)量較少的那個(gè)索引;

2. 如果Cost值相同的索引的葉子塊數(shù)量相同,則Oracle會(huì)選擇索引名的字母順序在前面的那個(gè)索引。

先驗(yàn)證(2)的觀點(diǎn),從上面10053可以看出,兩個(gè)索引的cost相同,葉子塊數(shù)相同,此時(shí)CBO選擇的是IDX_Z_01,因?yàn)樗拿?,排在IDX_Z_02前面,

Best:: AccessPath: IndexRange
  Index: IDX_Z_01
         Cost: 2.00  Degree: 1  Resp: 2.00  Card: 0.00  Bytes: 0

執(zhí)行計(jì)劃顯示,使用索引IDX_Z_01,

除了索引名稱,以及索引葉子塊,本來我懷疑聚簇因子,會(huì)是另外一個(gè)影響因素,但通過設(shè)置IDX_Z_01的clsfct高于IDX_Z_02的clsfct,

exec dbms_stats.set_index_stats('BISAL','IDX_Z_01',clstfct=>21);

根據(jù)10053顯示,IDX_Z_01的clsfct高于IDX_Z_02的clsfct,

Index Stats::
  Index: IDX_Z_01  Col#: 1
    LVLS: 1  #LB: 100  #DK: 10000  LB/K: 1.00  DB/K: 1.00  CLUF: 21.00
  Index: IDX_Z_02  Col#: 2
    LVLS: 1  #LB: 20  #DK: 10000  LB/K: 1.00  DB/K: 1.00  CLUF: 18.00

此時(shí)CBO選擇的是IDX_Z_01,因?yàn)樗拿?,排在IDX_Z_02前面,并未考慮聚簇因子的影響,

Best:: AccessPath: IndexRange
  Index: IDX_Z_01
         Cost: 2.00  Degree: 1  Resp: 2.00  Card: 0.00  Bytes: 0

總結(jié):

對于cost相同的索引,10gR2及以上的版本,Oracle CBO還是有方法選擇,索引葉子塊是第一個(gè)條件,索引名稱排序是第二個(gè)條件。

當(dāng)前名稱:CBO如何選擇相同cost的索引
本文URL:http://chinadenli.net/article8/gicjop.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供ChatGPT、微信小程序、網(wǎng)站營銷、網(wǎng)站策劃、網(wǎng)站收錄企業(yè)網(wǎng)站制作

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

微信小程序開發(fā)