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)
/

数据库是 Oracle 11g

4

1 回答 1

2

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

如果您正在更新非索引列中的数据(例如,如果您正在更新colNotInIndex以在重建索引之前存储其他数据)并且这些更新会导致大量行被迁移,则可能是在禁用索引的情况下执行此 DML 将更有效(或尽管删除索引更危险且更难维护)。额外的索引维护是否会比重建索引增加更多时间是您必须测试的,但根据您的描述,删除和重新创建索引似乎不太可能节省时间。

于 2012-10-16T15:29:37.540 回答