[英]Oracle SQL Migrate Data Optimization
我有三个表UserTable,UserTablebBackUp和UserBlackList。 每个表大约有3500万个数据。
我想将每个tupple从UserTable迁移到UserTablebBackUp,其中entry不在UserBlackList中。 创建脚本如下。 您有优化此脚本的方法吗? 否则那是最好的一个? 谢谢。
insert /*+APPEND+*/ INTO UserTablebBackUp (id_backup) select id from UserTable
where id not IN (SELECT id from UserBlackList);
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
它应该更快...
并行 3500万行可以使您从并行执行中受益。 但是,有很多要求,例如企业版,并行设置,合理的硬件配置,足够的资源等。
如果您使用的是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语言参考》以了解一些限制,以及此有用的nologging设置矩阵 。
即使是这样简单的查询,也应始终发布解释计划。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.