当前位置: 代码迷 >> Oracle技术 >> 关于 oracle 的 forall 话语效率
  详细解决方案

关于 oracle 的 forall 话语效率

热度:464   发布时间:2016-04-24 08:06:29.0
关于 oracle 的 forall 语句效率
我在书上看到说:oracle里面的forall语句批量进行DML操作的时候比常规for循环效率高很多,我结合网上的例子insert的时候确实效率相差很大,比如都插入1万条数据,使用forall确实效率比for高许多。但是update的时候,比如都更新1万条数据,forall和for的效率几乎没什么差别。delete也是。网上基本是insert的例子,难道forall的高效只适用于insert操作?求大神帮忙解释一下这是什么原因或者是能给个update或delete的例子,谢谢。。。
------解决思路----------------------
forall 使用限制很多,比如后面只能跟一条DML语句,这样就可以省掉了 switch context 的时间,在 insert 是表现最佳。你提到的 delete ,并不会有很明显的效率的提升,不过你可以把 1W 行,提高到 100W 行再试试。
而 for 语句因为可以使用 loop ,所以可以跟多条 DML ,甚至去调用一个 PROC ,
------解决思路----------------------
forall比起for,可以减少上下文切换,这是效率提升的原因所在
insert和delete、update有个不同的地方,insert只是将数据填充到数据块中,而delete、update需要通过where条件,定位到要处理的那条记录。定位时间越长,这部分开销所占比例就越大,减少上下文切换带来的节省时间就越不明显
  相关解决方案