网络编程 | 站长之家 | 网页制作 | 图形图象 | 操作系统 | 冲浪宝典 | 软件教学 | 网络办公 | 邮件系统 | 网络安全 | 认证考试 | 系统进程
Firefox | IE | Maxthon | 迅雷 | 电驴 | BitComet | FlashGet | QQ | QQ空间 | Vista | 输入法 | Ghost | Word | Excel | wps | Powerpoint
asp | .net | php | jsp | Sql | c# | Ajax | xml | Dreamweaver | FrontPages | Javascript | css | photoshop | fireworks | Flash | Cad | Discuz!
当前位置 > 网站建设学院 > 网络编程 > 数据库 > Oracle教程
Tag:注入,存储过程,分页,安全,优化,xmlhttp,fso,jmail,application,session,防盗链,stream,无组件,组件,md5,乱码,缓存,加密,验证码,算法,cookies,ubb,正则表达式,水印,索引,日志,压缩,base64,url重写,上传,控件,Web.config,JDBC,函数,内存,PDF,迁移,结构,破解,编译,配置,进程,分词,IIS,Apache,Tomcat,phpmyadmin,Gzip,触发器,socket
数据库:数据库教程,数据库技巧,Oracle教程,MySQL教程,Sybase教程,Access教程,DB2教程,数据库安全,数据库文摘
本月文章推荐
.关于shared pool的深入探讨(一).
.Oracle进程导致CPU 100%的具体解.
.上传文件至Oracle数据库.
.如何加快ORACLE本地OCI的调用速度.
.Oracle系统实用工具介绍.
.统计信息 Jonathan Lewis DBA 性.
.学会将SYS_GUID和序列作为主关键.
.ORACLE 截断字符串.
.将Oracle与Developer/2000安装在.
.Oracle中checkpoint的讨论.
.Oracle-Decode()函数和CASE语句有.
.ORACLE数据库不用索引来查找数据.
.Oracle 9i 在 Red Hat 7.1 和 7..
.ORACLE常用傻瓜问题1000问(之十三.
.异常和游标管理.
.Oracle数据库技术(15).
.oracle 10g 成功安装在solaris 1.
.过程,函数,程序包.
.Oradim工具的用法[收藏].
.PL/SQL学习笔记(五).

Oracle Pro*C/C++游标和存储过程性能测试报告

发表日期:2008-2-9


1.1    目的说明 进行Oracle数据库Pro*C/C++编程往往要对数据库中的记录进行读取,Pro*C/C++开发工具提供了二种对数据库读写的方法:一种我称之为游标(Cursor)的方式;另一种是C语言调用Oracle PL/SQL编程的储存过程方式;这二种方式在编程选择方面一般都没有太多数值比较说明,本文将实际编写测试代码,对这二种编码方式进行实际速度测试为各位读者在以后工作中进行编码选择提供经验。 测试环境 二台PC机其中一台是数据库服务器,另一台是客户端即本文测试代码运行机器 硬件        CPU P4 2.6        内存 1G 硬盘 80G 软件        windows2000        Oracle 8.1.7        VC6

1.2    测试记录

直接使用游标(cursor)和采用存储过程进行整表同步的测试结果 表1 120000条记录测试结果 测试次数 使用cursor方式(TD) 使用PL/SQL方式(WCDMA) 1 5'22" 7" 2 1'23" 8" 3 1'15" 7" 4 1'22" 7" 5 2'20" 6" 6 1'19" 8" 7 2'32" 8" 平均 2’13.3” 7.3”
表2 3000条记录测试结果 测试次数 使用cursor方式(TD) 使用PL/SQL方式(WCDMA) 1 3" 0" 2 2" 0" 3 2" 0" 4 2" 0" 5 2" 0" 平均 2.2” 0” 表3 9000条记录测试结果 测试次数 使用cursor方式(TD) 使用PL/SQL方式(WCDMA) 1 0" 0" 2 14" 1" 3 9" 0" 4 13" 1" 5 10" 0" 平均 9.2” 0.4” 根据测试结果可以看出的确用存储过程在大数据量时是极其有优势的,非凡是在大数据量的情况下,并且存储过程的性能极其稳定,cursor方式由于时间长,感觉受网络状况影响较大,时间长短不定。可以得出结论使用储存过程将18倍的提高数据查询读取速度。

1.3    部分测试代码

1.3.1   测试表脚本:

创建用于查询的表 drop table tb_boardt; create table tb_boardt(  BYBOARDTYPE   NUMBER(3),  ABYBOARDNAME  VARCHAR2(15) ) tablespace cm_space;
用储存过程向表中插入需要查询的120000记录:) declare i integer :=0; begin        for i in 1..20000 loop               insert into tb_boardt values(1,'Allen_BOARD');               insert into tb_boardt values(2,'LILY_BOARD');               insert into tb_boardt values(4,'LIL_BOARD');               insert into tb_boardt values(5,'ALLEN_BOARD');               insert into tb_boardt values(6,'BEMC_BOARD');               insert into tb_boardt values(7,'TWIM_BOARD');               commit;        end loop; end; / 用于读取记录的存储过程包头 create or replace package testEptTbl as        type charArrayType is table of varchar2(2048)         index by binary_integer;        type lcharArrayType is table of varchar2(2048)         index by binary_integer;     type numArrayType is table of int         index by binary_integer;        num   INTEGER;        m_RncID INTEGER;
procedure get_R0BrdLib(               batch_size     in     integer,               found          in out integer,               done_fetch     out    integer,               BoardType1 out numArrayType,/*单板类型Board Type*/               BoardName1 out charArrayType/*各子单元类型包含的子单元个数Sunit Number Per Type*/);         end testEptTbl; / show err 用于记录的存储过程包体 create or replace package body testEptTbl as /*   3   */        cursor CUR_R0BrdLib is               SELECT BYBOARDTYPE,ABYBOARDNAME  FROM tb_boardt;                            procedure get_R0BrdLib(               batch_size     in     integer,               found          in out integer,               done_fetch     out    integer,               BoardType1 out numArrayType,/*单板类型Board Type*/               BoardName1 out charArrayType/*各子单元类型包含的子单元个数Sunit Number Per Type*/) is        begin               if not CUR_R0BrdLib%isopen then                      open CUR_R0BrdLib;               end if;               done_fetch := 0;               found := 0;               for i in 1..batch_size loop                      fetch CUR_R0BrdLib                             into BoardType1(i),BoardName1(i);                      if CUR_R0BrdLib%notfound then                             close CUR_R0BrdLib;                             done_fetch := 1;                             exit;                      else                             found := found + 1;                      end if;               end loop;        end get_R0BrdLib; end testEptTbl; / show err

1.3.2   游标方式:

//倒出数据到zdb   void CBOARDT::WriteZdb(int SubNetID,int NodeBID) {            EXEC SQL BEGIN DECLARE SECTION;       int iSubNetID = SubNetID;       int iNodeBID = NodeBID;     EXEC SQL END DECLARE SECTION;               char tmpbuf[128],StartTime[256],EndTime[256];
上一篇:Oracle Tuning (Oracle 性能调整)的一些总结 人气:905
下一篇:ORACLE傻瓜手册长篇连载 人气:692
浏览全部Oracle教程的内容 Dreamweaver插件下载 网页广告代码 祝你圣诞节快乐 2009年新年快乐