为什么80%的码农都做不了架构师?>>>   

一、        批量提交

批量提交特点:

占用较少undo,资源(独占锁,undo)快速释放,执行时间长

批量提交适合场景:

在线大批量插入,更新,删除数据

二、        BULK COLLECT+FORALL性能提升

1.通过BULK COLLECT加速查询

不管是显示游标还是隐式游标,都可以通过BULK COLLECT在数据库的单次交互中获取多行数据。BULKCOLLECT相对Cursor Loop方式减少了PL/SQL引擎和SQL引擎之间的切换次数,因此也减少了提取数据时的额外开销。

2 通过LIMIT rows限制提取的记录数

这种方法会减少对PGA的消耗,避免换页产生

3通过FORALL 加速DML

FORALL告诉PL/SQL引擎要先把一个或多个集合的所有成员都绑定到SQL语句中,然后再把语句发送给SQL引擎, 如果for ..loop 循环,那么会发送n(循环的次数)次,而用Forall,一次行全部发送过去。

三、        BULK COLLECT + FORALL 批量提交例句

insert

declareTYPE ARRAY IS TABLE OF big_table%ROWTYPE;l_data ARRAY;CURSOR c ISSELECT * FROM big_table;
BEGINOPEN c;LOOPFETCH c BULK COLLECTINTO l_data LIMIT 5000;FORALL i IN 1 .. l_data.COUNTINSERT /*+append*/INTO big_tableVALUES l_data(i);commit;EXIT WHEN c%NOTFOUND;END LOOP;CLOSE c;

delete

DECLARECURSOR mycursor ISSELECT rowid FROM t WHERE OO = XX;TYPE rowid_table_type IS TABLE OF rowid index by pls_integer;v_rowid rowid_table_type;
BEGINOPEN mycursor;LOOPFETCH mycursor BULK COLLECTINTO v_rowid LIMIT 5000;EXIT WHEN v_rowid.count = 0;FORALL i IN v_rowid.FIRST .. v_rowid.LASTDELETE t WHERE rowid = v_rowid(i);COMMIT;END LOOP;CLOSE mycursor;
END;

update

DECLARECURSOR mycursor ISSELECT t_pk FROM t WHERE OO = XX;TYPE num_tab_t IS TABLE OF NUMBER(38);pk_tab NUM_TAB_T;
BEGINOPEN mycursor;LOOPFETCH mycursor BULK COLLECTINTO pk_tab LIMIT 5000;EXIT WHEN pk_tab.count = 0;FORALL i IN pk_tab.FIRST .. v_rowid.LASTUPDATE t SET name = name || ’bulk’ WHERE t_pk = pk_tab(i);COMMIT;END LOOP;CLOSE mycursor;
END;

转载于:https://my.oschina.net/168052730/blog/644282

使用BULK COLLECT+FORALL加速批量提交相关推荐

  1. forall分批提交oracle,使用BULK COLLECT+FORALL加速批量提交

    一.批量提交 批量提交特点: 占用较少undo,资源(独占锁,undo)快速释放,执行时间长 批量提交适合场景: 在线大批量插入,更新,删除数据 二.BULK COLLECT+FORALL性能提升 1 ...

  2. PL/SQL批处理语句:BULK COLLECT 和 FORALL

    PL/SQL程序中运行SQL语句是存在开销的,因为SQL语句是要提交给SQL引擎处理,这种在PL/SQL引擎和SQL引擎之间的控制转移叫做上下文却换,每次却换时,都有额外的开销        请看下图 ...

  3. PostgreSQL Oracle 兼容性之 - PL/SQL FORALL, BULK COLLECT

    Oracle PL/SQL 开发的童鞋,一定对O家的bulk批量处理的性能很是赞赏吧. 但是PostgreSQL用户请不要垂涎,作为学院派和工业界的一颗璀璨明珠. 开源数据库PostgreSQL,也有 ...

  4. oracle bulk collect

    碰到的问题,有一个员工表,存储着员工的各种信息. 我要写一个过程,传进去员工的名字,打印该员工的信息. create or replace procedure getInfo(name emp.ena ...

  5. bulk怎么使用oracle,oracle学习之bulk collect用法

    通过bulk collect减少loop处理的开销,使用Bulk Collect提高Oracle查询效率 Oracle8i中首次引入了Bulk Collect特性,该特性可以让我们在PL/SQL中能使 ...

  6. Oracle学习笔记之五sp1,PL/SQL之BULK COLLECT

    Bulk Collect特性可以让我们在PL/SQL中能使用批查询,批查询在某些情况下能显著提高查询效率. BULK COLLECT 子句会批量检索结果,即一次性将结果集绑定到一个集合变量中,并从SQ ...

  7. oracle大数据量迁移,分批量导入样例(fetch...bulk collect)以及forall结合使用

    //插入时不产生日志, alter table IALHospitalInfo nologging; //记录时间 set timing on; declareCURSOR cur is select ...

  8. Oracle 中使用 fetch bulk collect into 批量效率的读取

    http://www.jzxue.com/shujuku/oracle/201109/21-8976.html 通常我们获取游标数据是用 fetch some_cursor into var1, va ...

  9. Oracle 中使用 fetch bulk collect into 批量效率的读取游标数据

    通常我们获取游标数据是用 fetch some_cursor into var1, var2 的形式,当游标中的记录数不多时不打紧.然而自 Oracle 8i 起,Oracle 为我们提供了 fetc ...

最新文章

  1. android dslr控制软件,DSLR Controller
  2. 没抢到欧冠杯的票?没关系!在VR中看!
  3. oracle学习笔记三
  4. PrincipleCTEbook
  5. oracle 日期计算
  6. python怎么一直循环_python 基础之while无限循环
  7. 计算机文字处理操作题33,2017年国家计算机等级考试试题【文字处理】.doc
  8. 关于Cocos2d-x发布游戏的时候遇到的问题和解决
  9. 决策树1 -- ID3_C4.5算法
  10. After Effects - Bodymovin 插件验货及感受
  11. Leetcode--用两个栈实现一个队列
  12. 天翼1号2021修改IMEI教程
  13. 解决应用MSBuild编译项目没有拷贝间接引用的dll题目
  14. java 特立独行的幸福
  15. 如何将栅格数据与行政边界_实时大数据监控–与边界专家Gary Read进行问答
  16. 纯css position:sticky 实现表格首行和首列固定
  17. python扫描局域网端口和ip_我想用python扫描局域网内的ip和mac地址,需要什么第三方库...
  18. SWIG使用简明教程(一)
  19. NCBI参考序列RefSeq
  20. 【云原生Docker系列第三篇】Docker网络模式(在失去的所有人里,我最怀念自己 )

热门文章

  1. android contentresolver 批量,Android之使用ContentResolver对通信录中的数据进行简单操作...
  2. 耳挂式蓝牙耳机原理_挂耳式蓝牙耳机如何佩戴
  3. 需要某个字体包才能正确显示此页面_[三分钟小文]前端性能优化-页面加载速度优化...
  4. android web developer,Growth: 一个关于如何成为优秀Web Developer 的 App
  5. 前端学到什么程度可以找到工作?
  6. 学java出来工作会很忙吗?
  7. 10个前端开发人员必须知道的CSS框架
  8. 数据库,部分函数依赖,传递函数依赖,完全函数依赖,三种范式的区别
  9. mysql5.718免安装教程_mysql5.7.18版本免安装配置教程
  10. 后端根据百度地图真实路径距离_百度地图开放平台介绍--路线规划