当前位置:首页 > 日记 > 正文

在PL/SQL批处理语句的一个简短的讨论:批量收集所有优化的贡献

在PL/SQL批处理语句的一个简短的讨论:批量收集所有优化的贡献
我们知道,在SQL SQL程序中运行SQL语句是开销很大的,因为SQL语句将提交给SQL引擎。
这一引擎与SQL引擎之间的控制转换称为上下文更改,每次更改时都有额外的开销。
请看下面的图片。
然而,所有和散装收集可以使PL / SQL引擎压缩多重语境为一体,这使得它的PL / SQL中的多行SQL语句的执行时间的需要。
请再看下一张图片。

下面是他们两个的详细解释。

通过批量收集加速查询

使用散装货物

通过批量收集,查询结果可以立即加载到集合中,而不是一次一次地加载到集合中。
可以在选择中使用批量收集、提取、返回语句。
注意,当使用批量收集时,所有变量都必须是集合。

几个简单的例子:

(1)在SELECT语句中使用批量收集。
复制代码代码如下所示:
声明
型sallist表员工工资的百分之式;
课后sallist;
开始
选择薪酬体收集到从员工那里rownum <=销售50;
-然后使用集合中的数据
结束;
/

(2)使用批量收集获取
复制代码代码如下所示:
声明
型deptrectab是部门%ROWTYPE表;
dept_recs deptrectab;
光标选择department_id,从部门里的department_id > 10 department_name;
开始
开放课程;
取当前散装收集到dept_recs;
-然后使用集合中的数据
结束;
/

(3)在返回时使用批量收集。
复制代码代码如下所示:
从员工中创建表EMP作为选择*;

声明
型numlist是表employee_id %型员工;
枚举numlist;
型名单表last_name %型员工;
名字的名单;
开始
删除EMP在department_id = 30
返回employee_id,last_name散装收集到枚举的名字;
dbms_output.put_line('deleted| | SQL %行| | 'rows:');
我在枚举。第一..enums.last

dbms_output.put_line('employee #| |枚举(我)| | ':' | |名字(我));
结束循环;
结束;
/

deleted6rows:
114:员工#南洲
员工# 115:邱
员工# 116:拜达
员工# 117:托拜厄斯
员工# 118:冰室
员工# 119:柯莫纳雷
创建表EMP从申报类型*员工选择;numlist是表的员工。employee_id %类型;枚举类型numlist;名单表的员工。last_name %型;名字的名单;开始删除EMP在department_id = 30返回employee_id,last_name散装收集到枚举名称;dbms_output.put_line('deleted| | SQL %行| | 'rows:');我在enums.first enums.last环。dbms_output.put_line('employee #| |枚举(我)| | ':' | |名字(我));循环结束;结束/ deleted6rows:员工# 114:raphaelyemployee # 115:khooemployee # 116:baidaemployee # 117:tobiasemployee # 118:himuroemployee # 119:Colmenares;
删除更新批量收集数据的优化

你可以在这里删除,更新是一样的。

受理案件:
您需要在1亿行的大表中删除1000万行数据。
当数据库的其他应用程序的影响最小时,需要以最快的速度完成需求。

如果企业不能停止,你可以参考以下想法:
根据rowid片,rowid排序,批量处理回用,回表的删除
当企业不能停止时,这是最好的选择。
通常控制在每一万行提交一次,不会对回滚部分造成太大压力。
When I'm doing a big DML, I usually choose one thousand or two thousand lines and one submission
当您选择在低峰值时做生意时,它不会对应用程序产生很大的影响。
代码如下:
复制代码代码如下所示:
声明
---光标按ROWID
-删除条件是基于实际情况的
游标游标是选择从哪里OO = XX rowid为ROWID;
型rowid_table_type是pls_integer rowid指数表;
v_rowid rowid_table_type;
开始
打开游标;

把游标散装收集到v_rowid限5000——5000线提交;
v_rowid数= 0时退出;
就我在v_rowid第一.. v_rowid.last。
删除T,rowid = v_rowid(我);
承诺;
结束循环;
关闭游标;
结束;
/

从记录限制中提取的批量收集的数量

Grammar:
获取游标批量收集到…{限制行};
在这种情况下,行可以是常量,而变量或评价的结果是整数的表达式。

假设你需要查询和处理1w线数据,你可以使用散装收集把所有行一次,然后填写到一个非常大的收集。
然而,这种方法将消耗大量的PGA会话,应用程序可能是因为PGA饲料性能下降。

此时,限制子句非常有用,它帮助我们控制程序用来处理数据的内存量。

实例uff1a
复制代码代码如下所示:
声明
光标allrows_cur是SELECT * FROM员工;
型employee_aat是allrows_cur %ROWTYPE指数binary_integer表;
v_emp employee_aat;
开始
打开allrows_cur;

取allrows_cur批量提取到v_emp限制100;

通过扫描数据收集/处理。
我在1…v_emp.count

upgrade_employee_status(v_emp(我)。employee_id);
结束循环;

退出时未allrows_cur %;
结束循环;

近allrows_cur;
结束;
/

间歇萃取塔

需求:
在运输表中提取不到20公里/人民币的交通信息。
代码如下:
复制代码代码如下所示:
声明
-声明集类型
型vehtab是运输%ROWTYPE表;
-初始化这种类型的集合
gas_quzzlers vehtab;
开始
选择从哪里gas_quzzlers散装收集到运输里程<20;


根据使用返回子句的批处理操作

与回归的条款,我们可以很容易地确定刚刚竣工的DML操作的结果没有任何额外的查询工作
例如,请参见批量收集使用的第三个点。
通过对两加快DML

所有的PL / SQL引擎告诉绑定一个或多个设置SQL语句前的所有成员,然后发送语句的SQL引擎

1语法
待续…

相关文章

oracle函数使用中的几个问题

oracle函数使用中的几个问题

函数,几个问题,电脑软件,oracle,编写存储过程时,使用以下SQL语句 复制代码代码如下所示: 选择最大(re_date)为v_re_date 从t_recording id是'100010010102 根据这个条件,查询的结果应该是SQLCODE = 1403,但奇怪的是,下面的SQL例外不抓。 复制代…

素材充分的PPT模板

素材充分的PPT模板

模板,素材,电脑软件,PPT,PPT的很多朋友只是不知道从哪里开始制作一个完整的PPT模板。今天我就借此机会与大家分享我的一些经验,希望能给那些新手朋友一些启示,慢慢从菜鸟到高手。 的PPT模板的基本操作是在PowerPoint2003: 首先,在制作PPT模板之…

ylive.exe的过程是怎样的

ylive.exe的过程是怎样的

的是,过程,是怎样,电脑软件,ylive,评论:对ylive.exe工艺简介 进程文件:ylive或ylive.exe 进程名称:ylive 工艺种类: 英文描述: 对不起,这个过程没有英文描述。 中文参考: YAssistSe.exe和ylive .exe:雅虎助手和雅虎现场交流 制片人:雅虎搜索 属于:…

PS图象处理软件自由控制大小

PS图象处理软件自由控制大小

控制,图象,处理软件,大小,自由,核心提示:Z的快捷缩放工具,加上Alt键的放大倍数,空格键缩小工具,但用鼠标点击缩放;同样的按Ctrl + +和键也缩小了放大倍率和图像; 缩放工具的快捷键为z此外,Ctrl;空间ALT为放大工具,空间为了减少工具,但用鼠标点击缩放…

错误1406:用于列解决方案的数据太长

错误1406:用于列解决方案的数据太长

解决方案,用于,数据,错误,太长,结算条件: 发现在my.ini SQL模式= strict_trans_tables,no_auto_create_user,no_engine_substitution 摆脱了strict_trans_tables。 或SQL模式= strict_trans_tables,no_auto_create_user,no_engine_substitution…

介绍了upnpframework.exe-upnpfram

介绍了upnpframework.exe-upnpfram

过程,电脑软件,upnpframework,exe,评论:upnpframework.exe - upnpframework过程 进程文件:upnpframework或upnpframework.exe 进程名称:VAIO媒体视频服务器 过程类别:安全风险的过程 英文描述: upnpframework.exe是与VAIO媒体视频服务器相关的…

你为什么不在QQ空间留言板上留言呢

你为什么不在QQ空间留言板上留言呢

空间,留言,板上,电脑软件,QQ,你为什么不看到当你在QQ空间留言板留言时,发布按钮 在这种情况下,建议您参考以下操作: 1、右击桌面空白,选择属性;设置,然后将屏幕分辨率调整到1024×768像素; 2,如果计算机分辨率正确,可能是本地网络暂时繁忙或不稳…

我很骄傲,因为我尝到了你的味道。

我很骄傲,因为我尝到了你的味道。

我很,尝到了,骄傲,味道,因为我,-我像个乞丐,我讨厌在这个城市里挣扎着活着— 绝对没有那么多是不可能的,只有你不想 即使是男人,我也有勇气与现实竞争。 你的两面三刀。它是如此严重,他不承认他,甚至在梦中。 想消失…不受打扰。 你说你有…

甲骨文存在与不存在的比较与分析

甲骨文存在与不存在的比较与分析

甲骨,文存,不存在,在与,电脑软件,回答关于两个最普通网民的问题。 存在与存在的区别 从SQL编程的角度来看,直观的是,存在并不是直觉多于选择, 在每一种可用于查询,存在似乎只用于相关子查询 从性能角度看 存在于循环中使用的方式,循环次数有…

MySQL的优化方法

MySQL的优化方法

方法,优化,电脑软件,MySQL,1,选择最适用的字段属性 MySQL可以很好的支持大数据的访问,但一般来说,数据库中的表的更小,更快的查询将被执行它。因此,创建一个表时,为了获得更好的性能,我们可以设置字段的宽度表中尽可能小。例如,定义拉链代码字段时,…

oracle数据库中锁等待方法的快速检

oracle数据库中锁等待方法的快速检

等待,检测,方法,数据库中,快速,通常,在大型数据库系统中,为了保证数据的一致性和在数据库中操作数据,系统将相应地锁定数据。 当程序提交修改(提交)或回滚(回滚)时,锁定在只读锁和独占行级独占锁中,资源将被释放,允许其他用户操作。 但在某些情况下…

oracle列合并的实现

oracle列合并的实现

合并,电脑软件,oracle,在许多情况下,我们使用Oracle列合并,而Oracle提供了以下几种实现列合并的方法: 1。wmsys.wm_concat之前使用Oracle 10g: wmsys.wm_concat分开的领域与价值 选择ID,wm_concat(名称)从tab_name组ID; 两。使用sys_connect_by_…