我有一种情况就是更新一个包含1.5亿条记录的表中的列(所有行)。
创建包含更新和删除前一个表的重复表是最好的方法,但是没有可用的磁盘空间来保存重复的表。 那么如何在更短的时间内完成更新?桌子上有分区。 我正在使用oracle 12c
答案 0 :(得分:1)
最干净的方法是不更新表,而是使用新的更新行列创建新表。例如,我们说我需要更新一个名为old_value
的列,其中包含一些最大值,而不是更新old_table:
create new_table as select foo, bar, max(old_value) from old_table;
drop table old_table;
rename new_table as old_table.
如果您需要更高的速度,可以使用带有nologging的并行查询来创建此创建,从而生成非常少的重做和无撤消日志。可以在此处确定更多详细信息:https://asktom.oracle.com/pls/asktom/f?p=100:11:0::NO::P11_QUESTION_ID:6407993912330