【发布时间】:2012-02-15 05:44:02
【问题描述】:
我有一个简单的 PL/SQL 过程,只有一个游标,然后我对其进行迭代。在每次迭代中,我都会创建一个 UPDATE 语句(在对数据执行一些业务逻辑之后)。
但是,如果有很多迭代(数万次),这可能会变得很慢,因为在每次迭代中都有一个 UPDATE 语句。
有没有办法以某种方式“延迟”这些更新,以便一次执行所有更新(因此速度更快)。
编辑:甲骨文 11
【问题讨论】:
-
嗯,问题在于 Oracle 维护其回滚段。你在一个事务中修改的越多,它变得越慢。就不能拆分业务逻辑,每1000个
UPDATEs左右加一个COMMIT;吗? -
@sjngm,这通常是个坏主意。 Tom Kyte 对此有很多话要说,例如,asktom.oracle.com/pls/apex/…。
-
@snjgm,减速不是因为回滚段,而是由迭代和选择引起的。与听起来执行的其他工作相比,回滚段的更新可以忽略不计
标签: performance oracle plsql oracle11g