我有一个包含3亿条记录的表(表A),我想根据某些条件执行数据保留活动。所以我想删除大约200M表中的记录。根据条件从非常大的表中删除旧记录
关于性能,我计划创建一个新表(Table-B),其中包含Table-A中最早的10M记录。然后,我可以从Table-B中选择符合条件的记录,并将其从表A中删除。
从表A中提取10M记录并使用SQL Loader加载到表B中需要约5小时。
我已经创建了索引,并且在适用的地方使用了并行32。
我想知道的是,
- 有没有更好的办法从表-A提取和将其加载表-B。
- 除了创建一个临时表(Table-B)之外,还有其他更好的方法吗?
DBMS:Oracle 10g,PL/SQL和Shell。
谢谢。
这两个表都在同一个数据库中吗?如果是的话,您是否使用SQL Loader来加载乳清?你不能只是'插入tableB select * from tableA'吗?另外创建tableB作为'no logging'来获得更快的插入。 Google'nologging'获取更多细节。 – Utsav
我同意@Utsav,只是'插入/ * +追加* /到t2选择*从t1哪里'应该需要几分钟而不是几个小时。这是我会更担心的'删除'。您是否有下一次需要分区的选项? –
关于“除了创建临时表(Table-B)之外是否还有其他更好的方法”,我不明白你的过程逻辑。表B是什么?我的意思是,创建它的替代方法不会创建它。 –