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