Oracle SQL迁移数据优化

时间:2013-09-04 13:37:42

标签: sql oracle

我有三个表UserTable,UserTablebBackUp和UserBlackList。每个表都有大约35M的数据。

我想将每个tupple从UserTable迁移到UserTablebBackUp,其中entiry不在UserBlackList中。创建了如下脚本。你有办法优化这个脚本吗?否则它是最好的一个?感谢。

insert /*+APPEND+*/ INTO UserTablebBackUp (id_backup) select id from UserTable 
        where id not IN (SELECT id from UserBlackList);

2 个答案:

答案 0 :(得分:1)

insert /*+APPEND+*/ INTO UserTablebBackUp(id_backup) select a.id from usertable a
left outer join userblacklist b on a.id=b.id where b.id is null 

它应该更快......

答案 1 :(得分:0)

并行性对于35M行,您可能会从parallel execution中受益。 但是有很多要求,例如企业版,并行设置,合理的硬件配置,足够的资源等。

如果你使用11gR2,它可能就像这样简单:

insert /*+ APPEND PARALLEL*/
INTO UserTablebBackUp (id_backup) select id from UserTable 
where id not IN (SELECT id from UserBlackList);

直接路径写入您可能已经知道了这一点,但值得仔细检查。
单独的APPEND提示并不总是足够的,直接路径写入有很多限制。 如果您使用直接路径插入,则应在执行计划中看到LOAD AS SELECT,而不是LOAD TABLE CONVENTIONAL。 如果您仍在使用常规插页,请参阅SQL Language Reference以了解某些限制,以及 this useful matrix的nologging设置。

即使是这样一个简单的查询,您也应该发布解释计划。