oracle之 反向鍵索引

張衝andy發表於2018-03-23

反向鍵索引是一種B-tree索引,它在保持列順序的同時,物理地改變每個索引鍵的位元組(反向鍵索引除了ROWID和still之外,反轉每個索引列的位元組)。例如,如果索引鍵為20,如果在十六進位制中儲存為這個鍵的兩個位元組是C1,則是標準b樹索引中的15個位元組,那麼一個反向鍵索引將位元組儲存為15,C1。

優點:
反轉鍵解決了b樹索引右側葉塊爭用的問題。這個問題在Oracle Real Application cluster (Oracle RAC)資料庫中尤其突出,在這個資料庫中多個例項反覆修改同一個塊。例如,在orders表中,訂單的主鍵是順序的。叢集中的一個例項新增了order 20,而另一個例項新增了21,每個例項都將其關鍵字寫入索引右側的同一個葉塊。

在反向鍵索引中,位元組順序的反轉分佈在索引中的所有葉鍵上。例如,在標準鍵索引中相鄰的20和21這樣的鍵現在被分開儲存在不同的塊中(索引會在左邊,中間,右邊-到處都是)。所以爭論就這樣消失了。因此,順序鍵插入的I/O分佈更均勻。


缺點:
但是,必須指出的是:現在整個索引最好在緩衝區快取中,而在之前——只有熱的右側需要在快取中進行有效的插入。如果索引不能放入快取,我們很可能會將緩衝區繁忙的等待變成物理IO等待,這可能更糟(補救比症狀更糟糕)。

由於索引中的資料在儲存時沒有按列鍵排序,所以反向鍵安排在某些情況下消除了執行索引範圍掃描查詢的能力。例如,如果使用者對大於20的訂單ID發出查詢,那麼資料庫就不能從包含該ID的塊開始,然後水平地透過葉塊進行。

總結:
這些索引旨在消除插入應用程式上的索引熱點。這些索引對於插入效能非常好,但是它們是有限的,因為資料庫不能使用它們進行索引範圍掃描。

語法:
create index <INDEX_NAME> on <TABLE_NAME> (<COLUMN_NAME>, <COLUMN_NAME>)
REVERSE;

參考:What Are Reverse Key Indexes? (文件 ID 1070627.6)

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31383567/viewspace-2152153/,如需轉載,請註明出處,否則將追究法律責任。

相關文章