2017-08-01 50 views
1

今天我正在閱讀關於此link中的「分區索引」以瞭解性能調整要求。如果需要在創建索引期間手動給出範圍,分區索引如何提供幫助?

是在鏈接中給出的示例讀取類似如下:

CREATE INDEX employees_global_part_idx ON employees(employee_id) 
GLOBAL PARTITION BY RANGE(employee_id) 
(PARTITION p1 VALUES LESS THAN(5000), 
PARTITION p2 VALUES LESS THAN(MAXVALUE)); 

直到這一切看起來,除了它良好的有點混亂,我認爲該指數的定義中,我們手動設置P1的價值不到5000

因此,例如,如果表中有12000條記錄,一個分區具有直到1 5000條記錄,另一個有5000到12000條記錄這是不平等對方。此方法的另一個障礙是,如果有意的話,以後不能再製作更多的分區。所以這種索引方式隨着時間的推移將無法給出良好的性能優勢。

那麼,有沒有克服分區索引這一問題的任何方式?

回答

1

萬一employee_id值遞增創建新記錄時,您可能需要使用的,而不是RANGE分區的HASH分區索引。

Oracle Partitioning guide

散列分區全局索引還可以限制指數的影響歪斜上單調遞增列值。然後

你創建索引的查詢將是:

CREATE INDEX employees_global_part_idx ON employees(employee_id) GLOBAL 
    PARTITION BY HASH(employee_id) 
    (PARTITION p1, 
    PARTITION p2); 

這讓甲骨文采取均勻分佈在可用分區分割數據的照顧。

如果你真的想使用RANGE分區索引,那麼你現在需要通過分割最後一個分區和重建索引來維護索引。

閱讀也:Global Partitioned Indexes

+0

嗨,這些值p1和p2,它們表示什麼? – Mistu4u

+0

@ Mistu4u這些是分區的名稱,正如您在問題中編寫的示例中所定義的那樣。你可以使用任何你想要的文字。 –

1

在分區的Oracle方面提供了三種類型的索引:

  • Local Partitioned Indexes:每個表分區具有對應的索引的分區。我認爲這種類型被多數人使用(並且有用)。
  • Global Non-Partitioned Indexes:索引沒有分區,跨越整個表。例如,這樣的索引對於分區密鑰不是唯一密鑰的一部分的唯一密鑰是必需的。
  • Global Partitioned Indexes(你在你的問題是指類型):你獨立於指數的分區規則中定義表的分區規則。

其實我無法想象任何「全局分區索引」真的有意義的情況。它們只會用於某些非常特殊的應用。外來的使用案例。也許當你有非常多的數據時,你必須在不同的物理存儲器上分配你的索引。