2012-03-31 64 views
6

假設我有一個帶有自動遞增代理鍵的表。在替代鍵上使用反向索引的好習慣? (Oracle)

這是使用反向索引的好例子嗎?

上午我在陳述更正:

插入(成指數)會更快..因爲新值將被隨機插入,而不是總是將最右側的葉(不斷迫使重新平衡)。

索引查找會稍微慢一點,因爲數據庫將不得不花費一點時間來反轉索引。

因爲它是一個代理鍵..我不會真的需要範圍掃描能力(你不能做反向索引)。

(請注意,我沒有使用Oracle RAC)

回答

8

在一般情況下,如果你不使用RAC,也就沒有理由使用反向鍵索引。

從性能的角度來看,在任何給定的時間點都有一個或兩個熱點塊可以插入,因爲這基本上保證了熱塊將在緩衝區緩存中,並且INSERT贏得了不必花費從磁盤讀取數據塊的成本。如果你在索引中插入了隨機塊,那麼你想要的塊可能會超出緩存時間,並且會導致物理I/O的成本。

保持指數平衡的成本非常小,但即使這樣也有利於標準指數。如果你有一個具有正常索引的主鍵序列,Oracle會在該塊填滿時在最右邊的塊上執行90/10 block split。相反,如果您有反向密鑰索引,則只要給定塊填滿,Oracle就必須執行50/50 block splits。一個50/50塊將一半數據從舊塊中複製到新塊中,90/10塊分割僅將最右側數據值複製到新塊中。因此,90/10塊拆分比50/50塊拆分便宜得多,無論選擇哪種索引類型,您都需要執行大致相同數量的塊拆分。因此,維護常規索引的成本低於維護反向密鑰索引的成本,甚至忽略高速緩存的影響。

您考慮使用反向密鑰索引的原因是您正在使用RAC,並且您希望避免讓許多RAC節點都在同一個熱塊上進行爭奪的成本。如果您不斷需要將熱塊從一個節點運送到另一個節點以執行下一個插入,則可能需要使用反向鍵索引來減少該爭用。如果您已經獲得了分區選項的許可,那麼最好還是使用散列分區索引(不管表是否已分區,都可以完成此操作)。如果您尚未獲得分區選項的許可證,則反向密鑰索引可能足以解決熱區塊上的爭用問題,從而不需要許可證分區。

+0

實際上,根據我的經驗,反向關鍵指標在RAC中並不是那麼棒。根據我的經驗,使用散列分區索引(其中分區的數量是2的最小冪大於或等於RAC節點的數量)您會更好。我無法想到反向關鍵指標有意義的任何情況。請注意,即使在非分區表上,也可以擁有散列分區索引。 – 2012-04-01 16:35:07

+0

@Mark - 編輯我的答案納入此,謝謝。 – 2012-04-01 16:45:44

+0

關於分區選項許可證要求的好處。由於我們在整個環境中都有許可證,所以我總是忽略考慮這一點。 – 2012-04-02 03:44:22