大数据量下的DML操作 bulk collect into limit forall commit;

如果有个大数据量的DML操作事务,在OLAP报表等低并发库里. 并且强制归档模式中.

采用BULK 和FORALL 会比较快!

  1. open cur_COLUMN_USER;  
  2.   loop  
  3.    fetch cur_COLUMN_USER bulk collect  
  4.    into   
  5.           l_ARY_statedate,                      
  6.           l_ARY_form,  
  7.           l_ARY_columnid,             
  8.           l_ARY_usernumber,                     
  9.           l_ARY_new_user,                 
  10.           l_ARY_exit_use      
  11.    limit g_batch_size_n;  
  12.      
  13.    forall i in 1..l_ARY_statedate.count  
  14.     insert into content_lst_day  
  15.     (......)  
  16.     values(l_ary_statedate(i),....);  
  17.   
  18.  commit;  
  19. end loop;  


 

相对使用普通游标循环提取数据出来处理的话 会快很多.

原因 1 bulk collect into 到数组  可以一次型把数据提取出来,减少了循环当中PL/SQL和SQL引撑的切换时间

原因 2 forall in ..... 也是一次型提交数据到某个地方 也同样减少了循环当中PL/SQL和SQL引撑的切换时间

注意 1 数据太大 要设置合理的LIMIT 否则提取到数组的数据会爆了PGA的回话内存

原因 3 bulk 内部操作 对insert delete 做了优化 采用批量方法.极大减少了redo 和Undo 使用量.

原因 4 为证明 当一个大数据量的insert 会超级慢,如果分批插入的总时间 比一次插入省很多时间.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值