我有这样一种情况,想要更新一个有1.5亿条记录的表中的一列(所有行)。
通过更新和删除先前的表来创建复制表是最好的方法,但是没有可用的磁盘空间来容纳复制表。那么如何在更短的时间内执行更新呢?分区在表中。我正在使用oracle 12c
发布于 2017-02-07 14:21:02
最干净的方法不是更新表,而是创建一个包含已更新行的新列的新表。例如,假设我需要用某个值的最大值更新一个名为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
https://stackoverflow.com/questions/42082647
复制相似问题