删除数百万条记录oracle

时间:2016-01-04 13:15:59

标签: sql oracle oracle11g query-performance

如何在表格中删除30亿条记录。由于在线交易,我们无法删除并重新创建表格。它是系统的关键表。

桌子上有6个大索引。没有任何分区。如果我们将分区添加到表中,那么许多pl / sql代码将受到影响。

Delete from customers
where en_date < sysdate;

2 个答案:

答案 0 :(得分:1)

应该对包含数百万行的表进行分区。索引也应该被分区。分区将改变优化器选择的计划,但这是一件好事,因为优化器可以提出更好的执行计划。添加分区不会影响现有代码,如果在提示中出现任何分区(无论如何都没有),则删除分区。

了解表中的总行数会更有帮助,这样我们就可以知道要删除的数据百分比。

此外,如果您可以设计分区的方式,您要删除的所有行都属于一个或多个分区,您可以删除这些分区(并创建新的),这是从中删除的最快方法像你这样的大桌子。

答案 1 :(得分:0)

“我们如何删除表格中的3000万条记录。”

如果不需要一次删除条目,则一次删除这些条目的百分之几,直到查询结果大小为零,如果这是在实时系统上完成的。

也许找到要删除的条目的主键范围,手动更新删除SQL,以便一次删除几个百分比,以免过多地影响LIVE。