大家帮忙看一下,为什么效率变低了?
我的做法如下:
第一步:插入用户ID
insert orders (user_id) (
select
user_id
from
users
where
sum_date=20070912
);
commit;
操作结束后orders表将会有200万条记录
第二步:使用一个procedure更新orders表其他字段,基本内容如下
for c_step2 in (
select
user_id,
sum(product_fee) fee_all,
sum(product_num) product_all,
.
.
.
from
sell_his
where
sum_month between 200706 and 200708
group by
user_id
)
loop
update orders set fee_all=c_step2.fee_all, product_all=c_step2.product_all,
.
.
.
where
user_id=c_step2.user_id;
end loop;
commit;
当以上两个步骤单独执行时,速度还可以接受,基本上10分钟以内可以结束,但是当我把它们写入同一个procedure中时,第一步的执行时间大约为1分钟左右,但是第二步却需要超过40分钟,以上代码在写入同一个procedure没有任何改动,但是为什么效率差别这么大呢?我接触ORACLE的时间不长,希望大家指点一下,谢谢。
------解决方案--------------------把你二步放在一起的过程贴出来看看,怀疑有锁表。
------解决方案--------------------我觉得最大的分歧就在于第一次递交后 commit; 了。
第二种方法,200w条记录没有commit,占有了大量的内存。