如何改进更新大表

时间:2016-01-06 08:45:12

标签: sql oracle oracle11g informatica

我正在尝试提高informatica presql命令的性能,该命令更新大表(100mil记录)而没有where子句(将一列更新为null)。 这需要我超过一个小时,我必须得到更好的结果.. 任何关于如何改进它的想法都会很棒.. 提前致谢。 该表有3个索引和主键 帐户 子帐户 CaseId

未分区。

现在它的

 Update table1 set column1 = null

3 个答案:

答案 0 :(得分:3)

您可以启用并行dml&提示改善表现。

alter session enable parallel dml;

UPDATE /*+ full(t) parallel (t 8) */ table1 t set column1 = null ;

您可以查看完整文章here

答案 1 :(得分:0)

或者你可以试试这个,如果你真的不需要WHERE:

alter table table1 drop column column1 ;

alter table table1 add column column1  column1_datatype default NUll ;

这将很快:)

答案 2 :(得分:0)

您也可以考虑每100,000行提交一次。

declare
  n_num number;
begin
  n_num := 0;
  for x in (select rowid rid from table1) loop
    Update table1 set column1 = null where rowid = x.rid;
    n_num := n_num + 1;
    if mod(n_num,100000) = 0 then
      commit;
    end if;
  end loop;
  commit;
end;