我有超过60M的行要从2个单独的表(38M和19M)中删除。我之前从未删除过这么多行,而且我知道它会导致回滚错误等等,并且可能无法完成。
删除此行数的最佳方法是什么?
答案 0 :(得分:1)
您可以一次删除一些行并重复执行。
delete from *your_table*
where *conditions*
and rownum <= 1000000
上面的sql语句将一次删除1M行,你可以手动或使用PL / SQL块执行38次。
我能想到的另一种方式是......如果要删除大部分数据,你可以否定条件并将insert
数据(应该保留)添加到新表中,之后insert
,删除原始表并重命名新表。
create table *new_table* as
select * from *your_table*
where *conditions_of_remaining_data*
完成上述操作后,您可以删除旧表,并重命名该表。
drop table *your_table*;
alter table *new_table* rename to *your_table*;