我有一张800万行的表。
我创建了完全相同的表,没有任何索引,pk,fk,并尝试将表活动中的所有记录插入temp_activity。
alter session enable parallel dml;
alter table activity_temp nologging
insert into temp_activity m
select /*+ APPEND PARALLEL (i) */
t.*
from activity t
我的结果是
i=1 -> 168 sec
i=2 -> 197 sec
i=3 -> 208 sec
i=10 -> 268 sec
without /*APPEND PARALEL*/ hint -> +10 min
问题是自解释的:编译器有什么问题?
答案 0 :(得分:2)
选择/ * + APPEND PARALLEL(i)* /
对我毫无意义。为什么你会在SELECT中有APPEND
提示?
我想你想这样做:
alter session enable parallel dml;
insert /*+ append parallel(i) */ into temp_activity select * from activity;
另外,请注意并行始终是直接路径,如果并行,则会追加。并行插入将对表进行独占锁定。因为,在并行修改对象后,您无法读取/修改对象。
为您好好阅读https://asktom.oracle.com/pls/asktom/f?p=100:11:0::NO::P11_QUESTION_ID:1211797200346279484
关于并行类型,一切都记录在案。阅读http://docs.oracle.com/cd/E11882_01/server.112/e25523/parallel003.htm#i1006712