Oracle批量更新在存储过程中执行很慢,但单独执行很快

有一批量更新数据的语句块(4w数据),将语句块在PLSQL工具中单独执行只需要10秒就可以执行完成,但是将语句块放入存储过程中来执行却要很久,40多分钟才能执行完成。 请问这是什么情况,和什么有关系,和表空间有关系么?

    检查被更新字段和条件字段是否添加索引

    重建索引

    检查数据库临时表空间是否已满,已满手动清空(新建临时表空间,然后重新绑定,然后删除原临时表空间)

温馨提示:内容为网友见解,仅供参考
无其他回答

Oracle批量更新在存储过程中执行很慢,但单独执行很快
检查数据库临时表空间是否已满,已满手动清空(新建临时表空间,然后重新绑定,然后删除原临时表空间)

为什么oracle 隐式游游标+rowid进行存储过程批量更新慢,造成锁表,单独...
另外你这种loop写法还不如直接写一个update,反正也没有做到分批提交。要分批提交,最简单定义个变量,每次循环+1,5000一次commit这样写 if mod(i,5000)= 0 then commit;endif;

单独执行很快,为什么在存储过程里面执行很慢?
慢的原因是你在对List的循环中使用了List的get函数.典型的"Shlemiel喷涂算法",所以越跑越慢啊.List里是一个链表,get方法会从头一个个地数,越到后面,数的时间就越长.所以会慢..你应该修改方式,用下面的方法进行循环:for(Iterator it = list.iterator(); it.hasNext() ;){ Map map = (Map)it...

oracle存储过程执行速度很慢是什么原因
你查询慢的原因是你在存储过程中执行的话,没有索引时,他会一条一条查知道把80几万条数据全部扫描一遍直到查完了你才看到一个结果,但是你在外面单独执行很快的原因是plsql他会首先去查查到几条数据就先给你返回来,所以你马上就看到结果了,但实际上查询也并没有结束,你要是数据很多的情况下你...

oracle存储过程执行速度很慢是什么原因
原因很多,只能具体问题具体分析,一般来说,执行速度慢的原因有:1、sql语句效率太低 2、循环次数太多导致慢 3、数据量过于庞大,导致统计时速度慢等。

oracle数据库存储过程执行慢时如何优化
1 首先看看,先分析慢的原因,一部分是因为循环次数多,一部分是因为查询数据量大慢。2 可以从优化查询入手,比如某次查询的sql里面的数据,条件字段没有建索引,导致了全表扫描,是不是 只需要几个字段,但是你写了 select * 等等,总之要优化数据的速度。2 可以从循环逻辑看起,有些循环可能是不...

oracle 在sql>状态下 执行insert into select 正常 将这一段复制到存 ...
在command下执行快,有可能是你之前执行过select语句,以至于数据库缓存中有现成的语句执行计划分析报告,所以,单句执行时就快一些,但在存储过程中,oracle是整个存储过程一起硬解析的,所以,会慢。一般来说,既然写了存储过程就不要用这种简写语句,这种写法通用性低,效率也低。

oracle存储过程update执行很慢(50多万条需要更新),求大神指点
哥们,使用中间表试试. 也许能快一些 -- 1.先把需要修改的数据查询出来 ,放入中间表1 DROP TABLE T_TABLE1;CREATE TABLE T_TABLE1 AS SELECT * FROM T_TABLE WHERE ...;DELETE TABLE T_TABLE1 WHERE ...;-- fun_c(C) 代表C 字段更新逻辑的函数.DROP TABLE T_TABLE2;CREATE TABLE T_...

oracle 存储过程执行insert 语句 效率很慢!!!
select distinct DMXDMZ, QXDM from TB_DIC_Constant) c on a.YLJGDM = c.DMXDMZgroup by c.QXDM, YLJGDM;执行速度快不快, 看一下要插入多少笔数据。以上确认是查询问题,还是插入问题。同时再看看数据库undo表空间,和v$log里重做日志的状态,应该可以找到问题点的 ...

oracle中存储过程执行很长时间,用了三个游标。
不用看执行计划都知道慢了,for c1 for c2 for c3 这种没有任何条件的三重循环的时间复杂度为C1记录数*C2记录数*C3记录数,你得尽量减少循环次数,能用sql就不要用游标循环了

相似回答