最近2018中文字幕在日韩欧美国产成人片_国产日韩精品一区二区在线_在线观看成年美女黄网色视频_国产精品一区三区五区_国产精彩刺激乱对白_看黄色黄大色黄片免费_人人超碰自拍cao_国产高清av在线_亚洲精品电影av_日韩美女尤物视频网站

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問(wèn)題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷解決方案
于位圖索引相關(guān)的執(zhí)行計(jì)劃

    位圖索引是oracle數(shù)據(jù)庫(kù)里除B樹(shù)索引之外的另外一種索引的類型,它主要用于數(shù)據(jù)倉(cāng)庫(kù)或者DSS系統(tǒng)。在數(shù)據(jù)倉(cāng)庫(kù)或DSS系統(tǒng)中,針對(duì)某些類型的sql,用位圖索引比用B樹(shù)索引要快很多,這主要是位圖索引實(shí)現(xiàn)了快捷的按位運(yùn)算的緣故。

創(chuàng)新互聯(lián)建站是一家集網(wǎng)站建設(shè),鄂州企業(yè)網(wǎng)站建設(shè),鄂州品牌網(wǎng)站建設(shè),網(wǎng)站定制,鄂州網(wǎng)站建設(shè)報(bào)價(jià),網(wǎng)絡(luò)營(yíng)銷,網(wǎng)絡(luò)優(yōu)化,鄂州網(wǎng)站推廣為一體的創(chuàng)新建站企業(yè),幫助傳統(tǒng)企業(yè)提升企業(yè)形象加強(qiáng)企業(yè)競(jìng)爭(zhēng)力。可充分滿足這一群體相比中小企業(yè)更為豐富、高端、多元的互聯(lián)網(wǎng)需求。同時(shí)我們時(shí)刻保持專業(yè)、時(shí)尚、前沿,時(shí)刻以成就客戶成長(zhǎng)自我,堅(jiān)持不斷學(xué)習(xí)、思考、沉淀、凈化自己,讓我們?yōu)楦嗟钠髽I(yè)打造出實(shí)用型網(wǎng)站。

    位圖索引的物理存儲(chǔ)結(jié)構(gòu)和普通B樹(shù)索引的物理存儲(chǔ)結(jié)構(gòu)相似,也是按照被索引的鍵值列有序存儲(chǔ),只不過(guò)和索引鍵值一起存儲(chǔ)的不再僅僅是索引鍵值所對(duì)應(yīng)的rowid,而是變成了三部分的組合。這三部分分別為對(duì)應(yīng)rowid的下限,對(duì)應(yīng)rowid的上限和被壓縮存儲(chǔ)的位圖(Bitmap Segment,位圖段最大只能為位圖索引葉子塊大小的1/2),即oracle數(shù)據(jù)庫(kù)中位圖索引的物理存儲(chǔ)結(jié)構(gòu):<被索引的鍵值,對(duì)應(yīng)rowid的下限,對(duì)應(yīng)rowid的上限,位圖段>,這里位圖段是壓縮存儲(chǔ)的,解壓縮后就是一連串0和1的二進(jìn)制位圖序列,其中1表示被索引鍵值的一個(gè)有效rowid,oracle通過(guò)一個(gè)轉(zhuǎn)換函數(shù)(mapping function)將解壓縮段的位圖段中的1結(jié)合對(duì)應(yīng)rowid的上下限,轉(zhuǎn)換為被索引鍵值所對(duì)應(yīng)的有效rowid。

    上述位圖索引的物理存儲(chǔ)結(jié)構(gòu)決定了oracle數(shù)據(jù)庫(kù)中位圖索引的鎖粒度是在索引行的位圖段上。對(duì)于oracle數(shù)據(jù)庫(kù)的位圖索引而言,它是沒(méi)有行鎖這個(gè)概念的,要鎖就鎖索引行的整個(gè)位圖,而多個(gè)數(shù)據(jù)行可能對(duì)應(yīng)同一索引的位圖段。這種鎖的粒度就決定了位圖索引不適用于高并發(fā)頻繁修改的OLTP系統(tǒng),如果在高并發(fā)且頻繁修改的OLTP系統(tǒng)中使用了位圖索引,很可能會(huì)導(dǎo)致嚴(yán)重的并發(fā)問(wèn)題,甚至?xí)a(chǎn)生死鎖。

    我們來(lái)看一個(gè)因?yàn)槲粓D索引而導(dǎo)致常見(jiàn)的并發(fā)insert操作出現(xiàn)死鎖的例子。創(chuàng)建一個(gè)測(cè)試表T1:

SQL> create table t1(id number,sex char(20));

Table created.

    在T1表中插入10000條數(shù)據(jù):

SQL> begin

  2  for i in 1..5000 loop

  3  insert into  t1 values(i,'MALE');

  4  insert into t1 values(i,'FEMALE');

  5  end loop;

  6  end;

  7  /

PL/SQL procedure successfully completed.

    在T1的列SEX上創(chuàng)建一個(gè)位圖索引IDX_BITMAP_T1:

SQL> create bitmap index idx_bitmap_t1 on t1(sex);

Index created.

    現(xiàn)在我們來(lái)構(gòu)造死鎖的情景,首先session 1中插入一條記錄但不commit:

SQL> insert into t1 values(10001,'MALE');

1 row created.

    接著到session 2,插入一條記錄但不commit:

SQL> insert into t1 values(10002,'FEMALE');

1 row created.

    回到session 1,再插入一條記錄,這時(shí)這個(gè)插入操作hang住了:

SQL> insert into t1 values(10003,'FEMALE');--hang住

    再回到session 2,又插入一條記錄,這時(shí)這個(gè)插入操作也hang住了:

    SQL> insert into t1 values(10004,'MALE');

    第2次回到session 1,這里oracle已經(jīng)檢測(cè)出了死鎖:

SQL> insert into t1 values(10003,'FEMALE');

insert into t1 values(10003,'FEMALE')         *

ERROR at line 1:

ORA-00060: deadlock detected while waiting for resource

    這里的原理是當(dāng)插入一條記錄時(shí),oracle需要去維護(hù)位圖索引IDX_BITMAP_T1中所對(duì)應(yīng)鍵值的位圖段,因?yàn)橛涗洈?shù)較少并且oracle是壓縮存儲(chǔ)位圖段的緣故,所有sex值male的5000條記錄對(duì)應(yīng)的都是同一條索引行,sex值為female的5000條記錄對(duì)應(yīng)也是同一條索引行。這也意味著當(dāng)插入一條新的sex值為male的那5000條記錄);但插入一條新的sex值為female的記錄時(shí),oracle會(huì)鎖原先所有sex值為female的那5000條記錄所對(duì)應(yīng)的位圖段(即相當(dāng)于鎖了所有sex值為female的那5000條記錄),所以通常情況下不會(huì)出現(xiàn)死鎖的并發(fā)insert操作就這樣出現(xiàn)了死鎖。

    與B樹(shù)索引相比,位圖索引的優(yōu)勢(shì)主要體現(xiàn)在如下幾個(gè)方面:

(1)因?yàn)槲粓D索引的位圖段的是壓縮后存儲(chǔ)的,所以如果被索引的distinct值較少,那么位圖索引段與同列上的B樹(shù)索引比起來(lái),會(huì)顯著節(jié)省空間。比如上例中表T的SEX列,其distinct 值僅為2,雖然表T1的數(shù)據(jù)量為10000,但SEX列上單鍵值位圖索引idx_bitmap_t中只有兩個(gè)索引行,而如果sex列上創(chuàng)建單鍵值B樹(shù)索引,則顯然該B樹(shù)索引中的索引行的數(shù)量會(huì)是10000.

(2)如果需要再多個(gè)列上創(chuàng)建索引,那么位圖索引與同等條件下的B樹(shù)索引比起來(lái),往往會(huì)顯著節(jié)省存儲(chǔ)空間。比如針對(duì)表CUSTOMER上的三列master_status,region和gender,用戶可能會(huì)使用上述三列中任意單列或多列去訪問(wèn)表customer,如果此時(shí)要建B樹(shù)索引,那么需要建三個(gè)復(fù)合B樹(shù)索引(這里考慮到了復(fù)合B樹(shù)索引可以代替單鍵值B樹(shù)索引嗎,三列復(fù)合B樹(shù)索引可以代替兩列復(fù)合B樹(shù)索引)才能涵蓋所有的情況,而如果是建位圖索引的話,則只需要建三個(gè)針對(duì)上述三列的單鍵值位圖索引就夠了。

  (3)位圖索引能夠快速處理一些包含了各種AND或OR查詢條件的sql,這主要是因?yàn)槲粓D索引能夠?qū)崿F(xiàn)快捷的按位運(yùn)算的緣故。

    關(guān)于位圖索引能夠?qū)崿F(xiàn)快捷的按位運(yùn)算的原理,我們用一個(gè)實(shí)例來(lái)說(shuō)明。創(chuàng)建一個(gè)測(cè)試表customer:

SQL> create table customer(customer# number,marital_status varchar2(10),region varchar2(10),gender varchar2(10),income_level varchar2(10));

Table created.

    使用如下sql插入6條記錄:

SQL> insert into customer values(101,'single','east','male','bracket_1');

1 row created.

SQL> insert into customer values(102,'married','central','female','bracket_4');

1 row created.

SQL> insert into customer values(103,'married','west','female','bracket_2');

1 row created.

SQL> insert into customer values(104,'divorced','west','male','bracket_4');

1 row created.

SQL> insert into customer values(105,'single','central','female','bracket_2');

1 row created.

SQL> insert into customer values(106,'married','central','female','bracket_3');

1 row created.

SQL> commit;

Commit complete.

    在列region上創(chuàng)建一個(gè)位圖索引idx_b_region

SQL> create bitmap index idx_b_region on customer(region);

Index created.

    在列martial_status上創(chuàng)建另外一個(gè)位圖索引idx_b_martialstatus:

SQL> create bitmap index idx_b_maritalstatus on customer(marital_status);

Index created.

    

SQL> select * from customer;

 CUSTOMER# MARITAL_ST REGION GENDER     INCOME_LEV

---------- ---------- ---------- ---------- ----------

       101 single     east male    bracket_1

       102 married    central female     bracket_4

       103 married    west female     bracket_2

       104 divorced   west male    bracket_4

       105 single     central female     bracket_2

       106 married    central female     bracket_3

6 rows selected.


本文名稱:于位圖索引相關(guān)的執(zhí)行計(jì)劃
轉(zhuǎn)載源于:http://fisionsoft.com.cn/article/jeijeh.html