oracle的逆序鍵索引應用!

wei-xh發表於2010-05-08
首先得明確索引都是有序排列的。
而反向索引最大的用處是用在叢集環境中的。試想這樣一種情況,一個插入非常頻繁的表A,在列ID存在一個索引INDEX_A_ID,假如索引的生成順序是每次插入加1。如:
123
124
125
那麼這幾個索引鍵值非常非常大的可能是儲存在一個資料塊上的,而在叢集環境中,資料塊需要申請DLM鎖來進行資料塊的傳遞。
這樣的話,問題就出來了,對於插入非常頻繁的表,如果存在類似的索引,資料塊在叢集間的傳遞就非常頻繁,這樣的話肯定影響效能。
如果是反轉索引的話,情況就明顯不一樣了,以上面的例子來說,翻轉後,鍵值的順序是:
321
421
521
這幾個鍵值存在一個資料塊的可能性大大降低了。因此資料塊的在叢集間的傳遞爭用就會消失。我現在所維護的雙節點RAC,前段時間有幾個索引一直出現在AWR中(哪個部分我忘了,記不清了),就是因為上面的情況,建立了反轉索引後,徹底消失了。
但反向鍵索引也有它侷限性:如果在WHERE語句中,需要對索引列的值進行範圍性的搜尋,如BETWEEN、等,其反向鍵索引無法使用,這個時候,Oracle將執行全表掃描;只有對反向鍵索引列進行 <> 和 = 的比較操作時,其反向鍵索引才會得到使用。

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

相關文章