1. update时 ,禁用回滚段的生成,跟你前面说的nologing应该是一个意思
2. 分批更新,比如每更新10W条数据,就执行一次commit,这样效率也会比原来的要快。
当然是一次更新100条更有效率。你每次更新一条,要与服务器发生两次数据传输.你循环100次就要200次
你一次更新100条,只与服务器发生两次数据传输
当然是更新100次更有效率。前提是小数据量。
如果你说一次更新上100W条
和一次更新50000条分20次更新,那就是更新50000更有效率。因为一次更新100W条,服务器根本就吃不消,过程会非常的缓慢.
可通过以下方法:
以100条数据为例,如果海量数据可参考。
如test表中有如下数据:
现要将begintime改成当前时间,每10条提交一次。
可用如下存储过程:
declarei int--定义变量
v_count int--定义变量
v_loop int--定义变量
begin
select count(*) into v_count from test--计算表内数据总数
select ceil(v_count/10) into v_loop from dual--计算需要循环次数
i:=1--为i赋值
while i<=v_loop loop--循环退出条件
update test set begintime=sysdate where begintime is null and rownum<=10--执行更新
commit--提交
i:=i+1--i依次加1
end loop--结束循环
end
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)