2012-10-16 25 views
2

我有一個腳本會丟棄3個索引,改變同一個表中的列但與這些索引無關,並重新創建索引。索引在大型表格上,需要45分鐘才能重新創建。是否必須刪除並重新創建索引?是否正在刪除並重新創建索引所需的索引以更改未包含在索引中的列大小?

DROP INDEX index1; 

ALTER TABLE table1 MODIFY colNotInIndex VARCHAR(4000); 

CREATE INDEX index1 ON table1(col0, col1, col2) 
TABLESPACE INDX 
STORAGE (INITIAL 100k NEXT 100k PCTINCREASE 0) 
/

DB是的Oracle 11g

回答

2

如果你不改變任何索引的列的,沒有必要刪除並重新創建索引。

如果您正在更新非索引列中的數據 - 例如,如果您正在更新colNotInIndex以在重建索引之前存儲其他數據並且這些更新會導致大量行被遷移,在禁用索引的情況下執行此DML(或者刪除索引風險較大且難以維護)可能會更高效。無論額外的索引維護是否會爲重建索引添加更多時間,都需要進行測試,但根據您的描述,似乎不太可能會丟棄和​​重新創建索引會節省時間。

相關問題