我有一个脚本可以删除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
答案 0 :(得分:2)
如果您没有更改索引中的任何列,则无需删除并重新创建索引。
如果要更新非索引列中的数据 - 例如,如果您正在更新colNotInIndex
以在重建索引之前存储其他数据 - 那么这些更新会导致大量行在迁移时,有可能在禁用索引的情况下执行此DML会更有效(或者虽然丢弃索引会丢失并且更难维护)。除了重建索引之外,额外的索引维护是否会为进程添加更多时间是您必须测试的内容,但根据您的描述,删除和重新创建索引似乎不太可能节省时间。