是否正在删除并重新创建索引所需的索引以更改未包含在索引中的列大小?

时间:2012-10-16 15:21:49

标签: oracle11g

我有一个脚本可以删除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

1 个答案:

答案 0 :(得分:2)

如果您没有更改索引中的任何列,则无需删除并重新创建索引。

如果要更新非索引列中的数据 - 例如,如果您正在更新colNotInIndex以在重建索引之前存储其他数据 - 那么这些更新会导致大量行在迁移时,有可能在禁用索引的情况下执行此DML会更有效(或者虽然丢弃索引会丢失并且更难维护)。除了重建索引之外,额外的索引维护是否会为进程添加更多时间是您必须测试的内容,但根据您的描述,删除和重新创建索引似乎不太可能节省时间。