在oracle中,索引翻轉指的是在建立索引時,針對索引列的索引鍵值進行位元組反轉,進而實現分散存放不同子節點區塊的目的,是“B-tree”索引的一個分支;使用反向索引,能將索引列的鍵值反轉,實現順序的鍵值分散到不同的葉塊中,從而減少索引塊的爭用。
本教學操作環境:windows10系統、Oracle 12c版、Dell G3電腦。
反向索引作為B-tree索引的⼀個分⽀,主要是在建立索引時,針對索引列的索引鍵值進⾏位元組反轉,進⽽實現分散存放到不同葉
⼦節點塊的⽬的。
反向索引針對的問題
使⽤傳統的B-tree索引,當索引的欄位是依序產⽣時,對應的索引鍵值會基本分佈在同⼀個葉塊中。當⽤戶對該列進⾏操作時,
難免會發⽣索引塊的爭⽤。
使⽤反向索引,將索引列的鍵值進⾏反轉,實現順序的鍵值分散到不同的葉塊中,從⽽減少索引塊的爭⽤。
例如:鍵值1001、1002、1003,反轉後1001、2001、3001,進⽽分散到不⽤的葉⼦節點區塊。
當載入一些有序資料時,索引肯定會碰到與I/O相關的一些瓶頸。在資料載入期間,某部分索引和磁碟肯定會比其他部分使用頻繁得多。為了解決這個問題,可以把索引表空間存放在能夠把檔案實體分割在多個磁碟上的磁碟體系結構上。
為了解決這個問題,Oracle也提供了一種反轉鍵索引的方法。如果資料以反轉鍵索引存儲,這些資料的值就會與原先儲存的數值相反。這樣,資料1234、1235和1236就被儲存成4321、5321和6321。結果就是索引會為每次新插入的行更新不同的索引塊。
不能對點陣圖索引和索引組織表進行反轉鍵處理。
技巧:
如果您的磁碟容量有限,同時也要執行大量的有序載入,就可以使用反轉鍵索引。
不可以將反轉鍵索引與點陣圖索引或索引組織表結合使用。
ORACLE DBA實務:建立反轉關鍵字索引
對於大型線上事務處理系統來說,其中的表格一般都很大,在這些資料表的主鍵是由序號產生的,而且上面是有索引的。因此相鄰的索引記錄就可能存在同一個資料區塊中,這樣會形成資料區塊的競爭。而隨著時間流逝,會不斷在這些表中刪除舊的無用的數據,插入新的有用的數據,很顯然刪除的數據是序號很小的舊數據,而插入的數據序號是剛剛產生的(一定是大號),這就造成了另一個嚴重的問題:即該索引的樹是往序號大的一面偏,因此會使得樹的深度加深從而使系統效率下降。
為了解決上述問題,oracle引入了反轉關鍵字索引。反轉關鍵字索引透過將關鍵字(序號)的每個位元組順序顛倒過來再建立索引的方法實現的。舉例如下:
由上可見,原來相鄰的order#經反轉之後就不再相鄰了,這樣就可以把相鄰的order#分散到不同的資料塊中,上述問題也就迎刃而解。
但事物總是一分為二的,反轉索引關鍵字也有問題。例如在反轉關鍵字索引的表上進行範圍查詢就會遇到麻煩。在正常索引的況下,滿足條件的索引記錄應該放在同一個或相鄰的資料區塊中,速度會很快;而使用反轉關鍵字索引之後,原來相鄰的滿足條件的索引記錄已經被分散到多個資料區塊中,此事要完成查詢操作只能進行全表掃描。因此在決定是否使用反轉關鍵字索引時,要分清是插入操作重要,還是範圍查詢重要。
推薦教學:《Oracle影片教學》
以上是oracle索引反轉是什麼的詳細內容。更多資訊請關注PHP中文網其他相關文章!