【发布时间】:2016-01-04 13:15:58
【问题描述】:
我们如何删除一个表中的 3000 万条记录。由于在线事务,我们无法删除并重新创建表。它是系统的关键表。
表上有 6 个大索引。没有任何分区。如果我们将分区添加到表中,很多 pl/sql 代码都会受到影响。
Delete from customers
where en_date < sysdate;
【问题讨论】:
-
你的表分区了吗?
-
提前计划并分区表。
-
使用适当的 sysdate 替换运行多个查询。
-
您的原始删除将与任何“分块”解决方案一样执行,但您需要确保 30M 行有足够的撤消空间。最好分批删除和提交(比如说)1000 行,但这只是为了避免用完 undo 空间,而不是为了提高性能,
-
"如果我们将分区添加到表中,很多 pl/sql 代码都会受到影响。"你能详细说明一下有多少 pl/sql 代码会受到影响吗?
标签: sql oracle oracle11g query-performance