oracle中bulk,Oracle——Bulk
需求:向一张表插入1百万的数据,用存储过程实现。
测试:用第一种实现用了30S,如果改为bulk实现,不到2s。
sql> drop table t purge;
表已删除。
sql> set timing on
sql> create table t (x int);
sql> begin
for i in 1.. 1000000
loop
execute immediate 'insert into t values(:x)' using i;
end loop;
commit;
end;
/
@H_403_28@
@H_403_28@
PL/sql 过程已成功完成。
已用时间: 00: 00: 30.24
sql> truncate table t;
表被截断。
sql> DECLARE
TYPE V_X IS table of t%rowtype;
records V_X;
cursor cur_query is select rownum x from dual connect by level <=1000000;
begin
open cur_query;
loop
fetch cur_query bulk collect into records LIMIT 100000;
FORALL i in 1 .. records.count
INSERT INTO T values records(i);
exit when cur_query%notfound;
end loop;
commit;
end;
/
@H_403_28@
@H_403_28@
已用时间: 00: 00: 01.48
优化原理:
使用2个引擎来执行和代码块:引擎和PL/sql引擎,语句会导致在两个引擎之间进行context switch,从而影响性能。
2.从本质上讲,使用特殊的block或者subprogram来降低context switches可以提高性能。当语句在loop内使用collection elements作为bind variables来运行时,就会产生大量的context switches。与bulk相关的有2个语法:forall和bulk collect。
FORALL:将数据打包,一次性从PL/sql引擎发送给引擎。
bulk collect:将处理之后的结果集放到bulk collect里,然后一次性把bulk collect从引擎发送给PL/sql引擎。
因为bulk减少2个引擎之间的context switches,从而提升了性能,当要处理的数据量越大,使用bulk和不使用bulk性能区别就越明显。
总结
以上是编程之家为你收集整理的Oracle——Bulk全部内容,希望文章能够帮你解决Oracle——Bulk所遇到的程序开发问题。
如果觉得编程之家网站内容还不错,欢迎将编程之家网站推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
oracle中bulk,Oracle——Bulk相关推荐
- oracle中primary,oracle中如何 Primary key自增
oracle中如何 Priamry key自增 摸索了一晚上,终于实现了key的自增,现在将实现的过程总结如下: (1)首先创建一个表:这里是我创建的一个User表,包括id,user_name,pa ...
- oracle中命令,oracle中常用命令汇总(一)
1.如何查看Oracle的数据库sid名称? 如果用sysdba身份登录.执行以下命令: SQL> conn / as sysdba; 已连接. SQL> select name from ...
- oracle中totimestamp,oracle中to_timestamp和to_date什么区别
date类型是Oracle常用的日期型变量,时间间隔是秒.两个日期型相减得到是两个时间的间隔,注意单位是"天". timestamp是DATE类型的扩展,可以精确到小数秒(frac ...
- oracle中nextday,Oracle日期函数 next_day
Oracle日期函数 next_day 在Oracle是提供了next_day求指定日期的下一个日期. 语法 : next_day( date, weekday ) date is used to f ...
- oracle中submit,Oracle中DBMS_JOB.SUBMIT的用法说明
Oracle中DBMS_JOB.SUBMIT的用法说明 用法DEMO: DBMS_JOB.SUBMIT(:jobno,//job号 'your_procedure;',//要执行的过程 trunc(s ...
- oracle中isnumeric,Oracle 中 isnumeric 的三种实现
使用过 asp 的应该对 isnumeric 函数不会陌生,这是一个常用的判断入参是否为数字的函数.在 oracle 中没有现成的判断是否为数字函数,下面就用三种方法来实现: 1. 利用 to_num ...
- oracle中pdb,Oracle 12C新特性-CDB和PDB 详解
最近看到好多人都在尝试Oracle中的12C新特性-容器数据库,今年3月Orcle推出了Release2版本,可以算是一个稳定版本了.下午着手尝试了一下,还是蛮不错得 1.前言 CDB与PDB是Ora ...
- Oracle 中使用 fetch bulk collect into 批量效率的读取
http://www.jzxue.com/shujuku/oracle/201109/21-8976.html 通常我们获取游标数据是用 fetch some_cursor into var1, va ...
- Oracle 中使用 fetch bulk collect into 批量效率的读取游标数据
通常我们获取游标数据是用 fetch some_cursor into var1, var2 的形式,当游标中的记录数不多时不打紧.然而自 Oracle 8i 起,Oracle 为我们提供了 fetc ...
- oracle中defined,Oracle:专栏定义(Oracle: column ambigously defined)
Oracle:专栏定义(Oracle: column ambigously defined) 我收到以下错误. 据我所知,所有列都是由表名定义的,所以我不明白为什么我从Oracle数据库中得到这个错误 ...
最新文章
- 沃尔沃加入英伟达阵营 2021年开卖自动驾驶汽车
- c专家编程/c陷阱_如何避免常见的初学者陷阱并像专家一样开始编码
- phpwind管理权限泄露漏洞
- 在cocos creator 中使用websocket
- Kubernetes之yaml文件详解(汇总-详细)
- pg_restore - 从一个由 pg_dump 创建的备份文件中恢复 PostgreSQL 数据库。
- SQL单行函数-通用函数
- Oracle数据同步接口,增量数据从ERP系统到本地临时表封装解决方案
- Serverless Computing:现状与基础知识
- 快二游戏数据分析_1.更快的数据分析
- solidworks分析视频教程-结构应力仿真有限元虚拟样机及流场分析
- sysmain服务怎么启动 Win7 SuperFetch无法启动
- 华为交换机初始化和配置SSH和TELNET远程登录方法
- 支持向量回归(SVR)数据预测
- 20常见的手机问题及其解决方案
- 富文本TinyMCE
- django个人博客
- 坐拥深圳7栋房,月收租60万!房东却选择开出租……
- 动人的牵线美的连接符-两张表的查询(一)
- 共享打印机无法打印问题解决