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 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |
你可能对下面的文章感兴趣
关于PL/SQL用户指南与参考--PL/SQL应用程序性能调优的所有评论