Bulk_Collect_Performance 比较

news/2024/7/5 3:07:09

上一篇讲到了调用集锦,这篇关注一下性能问题吧。

DECLARECURSOR c_tool_listISSELECT descr d1 FROM hardware;l_descr hardware.descr%type;
BEGINOPEN c_tool_list;LOOPFETCH c_tool_list INTO l_descr;EXITWHEN c_tool_list%notfound;END LOOP;CLOSE c_tool_list;
END;

 

上面的语句在小陈机子上运行时间: 

Elapsed: 00:00:09.714

下面的语句又需要多久呢?

DECLARECURSOR c_tool_listISSELECT descr d2 FROM hardware;
type t_descr_list
ISTABLE OF c_tool_list%rowtype;l_descr_list t_descr_list;
BEGINOPEN c_tool_list;FETCH c_tool_list bulk collect INTO l_descr_list;CLOSE c_tool_list;
END;

 

Elapsed: 00:00:00.667答案是:

两个语句比较,上面的自然是简洁上占了优势,也少写了代码。不过从性能上,完全后者逆袭呀。真是海水不可斗量,人不可貌相。

下面我们来看看 collection type 的性能比拼

SET timing ON
DECLARE
type t_va IS varray(1000) OF NUMBER;
type t_nt
ISTABLE OF NUMBER;
type t_aa
ISTABLE OF NUMBER INDEX BY pls_integer;va t_va;nt t_nt;aa t_aa;
BEGINFOR i IN 1 .. 10000LOOPSELECT rownum---- Comment in the collection type you want to test--bulk collect INTO va--bulk collect into nt--bulk collect into aaFROM dualCONNECT BY level <= 1000 ;END LOOP;
END;

 


varray(1000) OF NUMBER; 

TABLE OF NUMBER;

TABLE OF NUMBER INDEX BY pls_integer;

执行时间分别是:

Elapsed: 00:00:09.234

Elapsed: 00:00:09.272

Elapsed: 00:00:09.472

看来时间上相差不大。

然后介绍一下LIMIT用法,书中的内存一直在增加,而小流氓的一直没有增加,神马情况?

  

set serveroutput on;cl scr;DECLARE
type t_row_list
ISTABLE OF hardware.descr%type;l_rows t_row_list;l_pga_ceiling NUMBER(10);
type t_fetch_size
ISTABLE OF pls_integer;l_fetch_sizes t_fetch_size := t_fetch_size(5,10,50,100,500,1000,10000,100000,1000000);rc sys_refcursor;
BEGINSELECT valueINTO l_pga_ceilingFROM v$mystat m,v$statname sWHERE s.statistic# = m.statistic#AND s.name         = 'session pga memory max';dbms_output.put_line('Initial PGA: '||l_pga_ceiling);FOR i IN 1 .. l_fetch_sizes.countLOOPOPEN rc FOR SELECT descr FROM hardware;LOOPFETCH rc bulk collect INTO l_rows limit l_fetch_sizes(i);EXITWHEN rc%notfound;END LOOP;CLOSE rc;SELECT valueINTO l_pga_ceilingFROM v$mystat m,v$statname sWHERE s.statistic# = m.statistic#AND s.name         = 'session pga memory max';dbms_output.put_line('Fetch size: '||l_fetch_sizes(i));dbms_output.put_line('- PGA Max: '||l_pga_ceiling);END LOOP;
END;

 

再来看看处理1000*1000*1000条数据,书中作者的报内存溢出了。ORA-04030: out of process memory when trying to allocate 16396 bytes

.

当然小陈的本本也不例外。只是错误不一样了。所以一定要配合LIMIT来使用,所以一定要配合LIMIT来使用,所以一定要配合LIMIT来使用。重要的事情说三次!!!

ORA-04036: 实例使用的 PGA 内存超出 PGA_AGGREGATE_LIMIT

cl scr;
DECLARE
type t_huge_set
ISTABLE OF NUMBER;l_the_server_slaminator t_huge_set;
BEGINSELECT rownum bulk collectINTO l_the_server_slaminatorFROM( SELECT level FROM dual CONNECT BY level <= 1000),( SELECT level FROM dual CONNECT BY level <= 1000),( SELECT level FROM dual CONNECT BY level <= 1000);
END;

 


 

转载于:https://www.cnblogs.com/cdjboy/p/4820779.html


http://lihuaxi.xjx100.cn/news/249174.html

相关文章

Java中 与,||与|的区别

阅读目录 区别短路运算举例回到顶部区别 && || 是逻辑运算&#xff0c;支持短路运算 & | 是位运算&#xff0c;不支持短路运算 回到顶部短路运算 当有多个表达式时,左边的表达式值可以确定结果时,就再继续运算右边的表达式的值; 回到顶部举例 例1 Testpublic void…

Android UI开发第二十五篇——分享一篇自定义的 Action Bar

Action Bar是android3.0以后才引入的&#xff0c;主要是替代3.0以前的menu和tittle bar。在3.0之前是不能使用Action Bar功能的。这里引入了自定义的Action Bar&#xff0c;自定义Action bar也不是完全实现了 Action bar功能&#xff0c;只是在外形上相似。自定义Action bar没有…

count http://www.cplusplus.com/reference/algorithm/count/

// count algorithm example#include <iostream>#include <algorithm>#include <vector>using namespace std;//count 他查找一个元素出现的次数int main () {int mycount;// counting elements in array: int myints[] {10,20,30,30,20,10,10,20}; // 8…

lamp一键安装包

lamp一键安装包 http://58.83.226.93/ http://www.centos.bz/lamp/ http://www.centos.bz/ lamp一键安装包 http://58.83.226.93/ http://www.centos.bz/lamp/ http://www.centos.bz/

IBM Thinkpad T43-44U 升级到 2G 内存后少了 66M

背景前段时间把 T43-44U 升级到 2G 内存&#xff0c;可以升级后&#xff0c;内存显示总是 1982M&#xff0c;少了 66M。奇怪之极&#xff0c;怎么搞都没搞好。有的热心网友建议重新刷 BIOS&#xff0c;升级到联想刚发布的 1.26 版。可是刷 BIOS 危险系数太高&#xff0c;俺是万…

Go 系列教程 —— 20. 并发入门

欢迎来到我们 Golang 系列教程的第 20 篇。 Go 是并发式语言&#xff0c;而不是并行式语言。在讨论 Go 如何处理并发之前&#xff0c;我们必须理解何为并发&#xff0c;以及并发与并行的区别。 并发是什么&#xff1f; 并发是指立即处理多个任务的能力。一个例子就能很好地说明…

17张图揭密支付宝系统架构

支付宝的系统架构图&#xff0c;仅供参考。不管是不是支付行业&#xff0c;都值得我们参考&#xff0c;学习。 imageimageimageimageimageimageimageimageimageimageimageimageimageimageimageimageimage推荐阅读 阿里高级Java面试题&#xff08;首发&#xff0c;70道&#xff…

性能测试中传——lr理论基础(四)

转载于:https://blog.51cto.com/fuwenchao/1346435