這篇文章將為大家詳細(xì)講解有關(guān)如何理解oracle中的反向鍵索引,文章內(nèi)容質(zhì)量較高,因此小編分享給大家做個(gè)參考,希望大家閱讀完這篇文章后對(duì)相關(guān)知識(shí)有一定的了解。
反向鍵索引是一種B-tree索引,它在保持列順序的同時(shí),物理地改變每個(gè)索引鍵的字節(jié)(反向鍵索引除了ROWID和still之外,反轉(zhuǎn)每個(gè)索引列的字節(jié))。例如,如果索引鍵為20,如果在十六進(jìn)制中存儲(chǔ)為這個(gè)鍵的兩個(gè)字節(jié)是C1,則是標(biāo)準(zhǔn)b樹(shù)索引中的15個(gè)字節(jié),那么一個(gè)反向鍵索引將字節(jié)存儲(chǔ)為15,C1。
優(yōu)點(diǎn):
反轉(zhuǎn)鍵解決了b樹(shù)索引右側(cè)葉塊爭(zhēng)用的問(wèn)題。這個(gè)問(wèn)題在Oracle Real Application cluster (Oracle RAC)數(shù)據(jù)庫(kù)中尤其突出,在這個(gè)數(shù)據(jù)庫(kù)中多個(gè)實(shí)例反復(fù)修改同一個(gè)塊。例如,在orders表中,訂單的主鍵是順序的。集群中的一個(gè)實(shí)例添加了order 20,而另一個(gè)實(shí)例添加了21,每個(gè)實(shí)例都將其關(guān)鍵字寫(xiě)入索引右側(cè)的同一個(gè)葉塊。
在反向鍵索引中,字節(jié)順序的反轉(zhuǎn)分布在索引中的所有葉鍵上。例如,在標(biāo)準(zhǔn)鍵索引中相鄰的20和21這樣的鍵現(xiàn)在被分開(kāi)存儲(chǔ)在不同的塊中(索引會(huì)在左邊,中間,右邊-到處都是)。所以爭(zhēng)論就這樣消失了。因此,順序鍵插入的I/O分布更均勻。
缺點(diǎn):
但是,必須指出的是:現(xiàn)在整個(gè)索引最好在緩沖區(qū)緩存中,而在之前——只有熱的右側(cè)需要在緩存中進(jìn)行有效的插入。如果索引不能放入緩存,我們很可能會(huì)將緩沖區(qū)繁忙的等待變成物理IO等待,這可能更糟(補(bǔ)救比癥狀更糟糕)。
由于索引中的數(shù)據(jù)在存儲(chǔ)時(shí)沒(méi)有按列鍵排序,所以反向鍵安排在某些情況下消除了運(yùn)行索引范圍掃描查詢(xún)的能力。例如,如果用戶(hù)對(duì)大于20的訂單ID發(fā)出查詢(xún),那么數(shù)據(jù)庫(kù)就不能從包含該ID的塊開(kāi)始,然后水平地通過(guò)葉塊進(jìn)行。
總結(jié):
這些索引旨在消除插入應(yīng)用程序上的索引熱點(diǎn)。這些索引對(duì)于插入性能非常好,但是它們是有限的,因?yàn)閿?shù)據(jù)庫(kù)不能使用它們進(jìn)行索引范圍掃描。
語(yǔ)法:
create index
REVERSE;
關(guān)于如何理解oracle中的反向鍵索引就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,可以學(xué)到更多知識(shí)。如果覺(jué)得文章不錯(cuò),可以把它分享出去讓更多的人看到。