oracle反向索引

2021-08-27 19:56:16 字數 751 閱讀 9160

我們知道oracle會自動為表的主鍵列建立索引,這個預設的索引是普通的b-tree索引。對於主鍵值是按順序(遞增或遞減)加入的情況,預設的b- tree索引並不理想。這是因為如果索引列的值具有嚴格順序時,隨著資料行的插入,索引樹的層級增長很快。搜尋索引發生的i/o讀寫次數和索引樹的層級數成正比,也就是說,一棵具有5個層級的b-tree索引,在最終讀取到索引資料時最多可能發生多達5次i/o操作。因而,減少索引的層級數是索引效能調整的乙個重要方法。

如果索引列的資料以嚴格的有序的方式插入,那麼b-tree索引樹將變成一棵不對稱的"歪樹",如圖 5所示:

圖 5不對稱的b-tree索引

而如果索引列的資料以隨機值的方式插入,我們將得到一棵趨向對稱的索引樹,如圖 6所示:

圖 6對稱的b-tree索引

比較圖 5和圖 6,在圖 5中搜尋到a塊需要進行5次i/o操作,而圖 6僅需要3次i/o操作。

既然索引列資料從序列中獲取,其有序性無法規避,但在建立索引時,oracle允許對索引列的值進行反向,即預先對列值進行位元位的反向,如 1000,10001,10011,10111,1100經過反向後的值將是0001,1001,1101,0011。顯然經過位反向處理的有序資料變得比較隨機了,這樣所得到的索引樹就比較對稱,從而提高表的查詢效能。

但反向鍵索引也有它侷限性:如果在where語句中,需要對索引列的值進行範圍性的搜尋,如between、<、>等,其反向鍵索引無法使用,此時,oracle將執行全表掃瞄;只有對反向鍵索引列進行 <> 和 = 的比較操作時,其反向鍵索引才會得到使用。

oracle反向索引

oracle反向索引 2013 05 07 13 52 20 0 收藏我要投稿 oracle反向索引 如 create index idx rev on tiger.test test name reverse 把索引表空間存放在能夠把檔案物理分割在多個磁碟上的磁碟體系結構上。資料以反轉鍵索引儲存,...

oracle反向索引

oracle反向索引 如 create index idx rev on tiger.test test name reverse 把索引表空間存放在能夠把檔案物理分割在多個磁碟上的磁碟體系結構上。資料以反轉鍵索引儲存,這些資料的值就會與原先儲存的數值相反。如 資料abc abcd 和abcf就被儲...

oracle之 反向鍵索引

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