我有一个像这样的sql:
Insert into A Select * from B;
现在我希望它并行运行.我的问题是并行插入或选择或两者?请参阅以下sqls,您能告诉我哪一个是正确的,哪个是最佳的.我没有dba权限,所以我无法检查其执行计划.
1)从B中插入/ *并行(A 6)* /到A select *中;
2)从B插入A select / * parallel(B 6)* / *;
3)从B中插入/ *并行(A 6)* /到A select / * parallel(B 6)* / *;
谢谢!
并行化INSERT和SELECT是最快的.
(如果你有足够多的数据,你有一个不错的服务器,一切都是明智的配置,等等)
你肯定想自己测试一下,特别是找到最佳的并行度.关于Oracle并行执行有很多神话,甚至手册有时也是horribly wrong.
在11gR2上,我建议你像这样运行你的语句:
alter session enable parallel dml; insert /*+ append parallel(6) */ into A select * from B;
>您始终要首先启用并行dml.
> parallel(6)使用statement-level parallelism,而不是对象级并行.这是一个11gR2功能,允许您轻松地并行运行所有内容,而不必担心对象别名或访问方法.对于10G,您必须使用多个提示.>通常,附加提示不是必需的.如果您的DML并行运行,它将自动使用直接路径插入.但是,如果您的语句降级为serial,例如,如果没有可用的并行服务器,那么追加提示可以产生很大的不同.