快速业务通道

PL/SQL用户指南与参考--PL/SQL应用程序性能调优

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-03-18
E emp SET sal = sal * 1.10 WHERE deptno = depts(i);
END LOOP;
END;

在这么的情况下,如若SQL话语影响到四行或更多行数据时,应用批量绑定就会显著地增高性能。比如,底下的UPDATE话语可以一次就把整个嵌套表的数据发送到SQL发动机中:

FORALL i IN depts.FIRST..depts.LAST
UPDATE emp SET sal = sal * 1.10 WHERE deptno = depts(i);

要想尽最大或许地拔高性能,我们就需要像下部这么编写程序:

一.如其一条INSERT、UPDATE或DELETE话语在循环内施行,而且摘引到会合中的元素,那么,就把它放到FORALL话语中去。
二.如其SELECT INTO、FETCHE INTO或RETURNING INTO子句引述了一个聚合,那就配合BULK COLLECT子句一行应用。
三.如若或许的话,尽可能在应用程序和服务器其间运用主数组传递聚合。
四.如若DML操作失败时且不是很重大的问题,就可以在FORALL话语中运用SAVE EXCEPTIONS,其后在之后的循环中施用%BULK_EXCEPTIONS属性汇报或驱除差错。
不用忽略这些小问题,由于它们可以相助我们分析流程统制和程序的依赖性。

三、施用NOCOPY编译器提醒优化PL/SQL

默许情况下,OUT和IN OUT形式的参数都是按值传接的。来讲,一个IN OUT实参会把它的复本拷贝到对应的形参中。其后,如其程序实施准确的话,这个值又会从新赋给OUT和IN OUT的实参。

但实参是聚合、记要和对象范例这么的大的数据结构时,生成一个复本会极大地减低施行效率并耗费大量内存储器的。为懂得决这个问题,我们可以应用编译器揭示NOCOPY,它能让编译器把OUT和IN OUT参数按摘引传送。下例中,我们就能让编译器按摘引传送IN OUT参数my_unit:

DECLARE
TYPE platoon IS VARRAY(200) OF soldier;
PROCEDURE reorganize(my_unit IN OUT NOCOPY platoon) IS ...
BEGIN
...
END;
END;

四、应用RETURNING子句优化PL/SQL

正常,应用程序亟需失去SQL操作所影响到的行信息。INSERT、UPDATE和DELETE话语都可以包孕一个RETURNING子句,这么就能回来处置过的字段信息。也就不要在INSERT、UPDATE以后或DELETE头里应用SELECT来查询影响到的数据。这么也能够减小网络流量,缩水CPU时间,急需更小量的游标和服务器内存储器需求。

鄙人面的事例中,我们就在更新雇职工资的与此同时,把现阶段雇员的名称和新的薪资赋给PL/SQL变量:

PROCEDURE update_salary(emp_id NUMBER) IS
"name" VARCHAR二(15);
new_sal NUMBER;
BEGIN
UPDATE emp
SET sal = sal * 1.1
WHERE empn

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号