2017-08-25 103 views
0

我有一個真正巨大的表X.這張表中每天插入100萬個recods。我必須在表格的其中一列上添加一個索引。但是,如果我這樣做,可能會發生以下影響。oracle數據庫:索引超過記錄的10%

  1. 插入,更新,刪除可能很慢。
  2. 額外的磁盤空間。
  3. 索引將針對每個DML語句進行更新。
  4. 無法預料的問題。
  5. 已經有許多其他指標存在於表X.

所以我不會指數增加任何價值,反而會製造更多的麻煩。

我已經想到了一個辦法來擺脫這種局面。 但我不知道它是否可以實現。請建議。

我想創建一個只對表中的前10%的記錄索引。 而且這個查詢應該保持在將來也只有它的10%。

+0

將您的數據分解爲兩個表格,最近和舊的。將索引添加到舊數據。 –

+0

你的桌子是否被劃分了? –

+0

您可能需要指定「前10%記錄」的含義。你如何確定哪些記錄在前10%? –

回答

2

如果你的表是真的很「龐大」(在我的應用程序一個我加每天1十億行),那麼你應該使用分區。我認爲你的大部分問題都將由此解決。

其實我的答案是無效的,你不使用分區和使用石器時代的Oracle 10g,但是我告訴你啦。

在版本12C甲骨文推出Partial Indexes for Partitioned Tables。使用此功能,您可以在單個分區上定義索引。

語法是這樣的:

CREATE INDEX MY_INDEX ON MY_TABLE (IND_COLS) INDEXING PARTIAL; 

也可以打開/關閉索引上現有的索引:

ALTER INDEX MY_INDEX INDEXING PARTIAL/FULL; 

然後你可以禁用/重建每個分區索引像

ALTER INDEX MY_INDEX MODIFY PARTITION P_123 UNUSABLE; 
ALTER INDEX MY_INDEX REBUILD PARTITION P_123; 

索引是由表分區控制的,因此在創建任何索引之前,您應該將default設置爲off,o無論每個新創建的分區將有「索引開」。

ALTER TABLE MY_TABLE MODIFY DEFAULT ATTRIBUTES INDEXING OFF;