在oracle中,索引翻轉指的是在創建索引時,針對索引列的索引鍵值進行字節反轉,進而實現分散存放不同子節點塊的目的,是“B-tree”索引的一個分支;使用反向索引,能將索引列的鍵值進行反轉,實現順序的鍵值分散到不同的葉塊中,從而減少索引塊的爭用。
本教程操作環境:windows10系統、Oracle 12c版、Dell G3電腦。
oracle索引反轉是什么
反向索引作為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視頻教程》