Oracle

Oracle中分區表的本地索引與全域索引

  • February 5, 2018

我已經對一個幾乎以每天 7-8 百萬行的速度增長的表進行了分區。分區已使用時間戳列完成,因為數據可以在幾週後存檔或丟棄。我還在主鍵或另一個唯一值上的表上創建了一個索引。我的索引也是分區的,但是,索引的分區是使用雜湊函式完成的,不包括表的分區鍵(這是一個時間戳)。所以我有幾個問題。

  • 對於具有大多數插入的不斷增長的表,分區是否通過插入和更新來緩解緩慢,或者分區索引足以保證更快的插入和更新。有人告訴我,以不同的方式對索引和表進行分區可能沒有價值。對錶進行分區以加快插入速度是否有意義?
  • 該表是一個寫密集型表。它目前主要是插入,每行更新一次,並在創建後幾秒鐘內通過索引 id 進行 2-3 次查找,然後永遠不會為任何操作訪問記錄。
  • 在唯一 id 上定義本地索引是最佳選擇,還是像我已經完成的那樣定義全域索引並對其進行分區更好?如果我定義全域索引,其中沒有表分區鍵(時間戳,不用於查找),如果分區數量很大,訪問會更昂貴嗎?
  • 為不斷增長的數據設置全域分區索引有什麼缺點?一旦我決定稍後刪除分區,由於索引不是按時間戳分區而是按唯一 ID 分區,該操作是否會對正常執行的索引產生直接影響?

任何其他建議都會有所幫助。

…分區是否可以通過插入和更新來緩解緩慢,或者分區索引是否足以保證更快的插入和更新…對錶進行分區以加快插入是否有意義?

不,絕對不是。分區的主要好處是刪除分區的成本低。您說“數據可以在幾週後存檔或丟棄”,這可能使您成為真正的分區候選人。

在唯一 id 上定義本地索引是最佳選擇,還是像我已經做過的那樣定義全域索引並對其進行分區更好?…為不斷增長的數據使用全域分區索引有什麼缺點?一旦我決定稍後刪除分區,由於索引不是按時間戳分區而是按唯一 ID 分區,該操作是否會對正常執行的索引產生直接影響?

使用全域索引首先違背了分區的原則——如果你刪除一個分區,它們會被標記為“不可用”。

您可能會發現這篇 ORACLE-BASE 文章很有用。

為什麼要進行雜湊分區而不是基於日期的範圍分區。如果您散列分區,則無法刪除整個分區。您可能得到的是,插入必須有可能跨多個分區和可能的單獨儲存完成。您可以按天分區,按小時分區,因此您一次寫入一個子分區並移動到下一個。因為您可以進行區間範圍分區,所以您不需要繼續創建新分區,只需刪除不再需要的分區即可。確保您有一個主鍵。否則每次刪除分區時都需要重建索引。應該使用主鍵來過濾掉所有不包含大多數查詢所需數據的分區。在您按日期查詢時至少租用。一旦分區修剪髮生,本地索引將有助於單個分區或子分區。全域索引可以幫助處理在您的情況下不是特定日期但需要在所有分區中選擇的查詢。

引用自:https://dba.stackexchange.com/questions/197053