国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 數據庫 > Oracle > 正文

Oracle Pro*C/C++游標和存儲過程性能測試報告

2024-08-29 13:45:49
字體:
來源:轉載
供稿:網友
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)15'22"7"21'23"8"31'15"7"41'22"7"52'20"6"61'19"8"72'32"8"平均2’13.3”7.3”
表2 3000條記錄測試結果 測試次數使用cursor方式(TD)使用PL/SQL方式(WCDMA)13"0"22"0"32"0"42"0"52"0"平均2.2”0” 表3 9000條記錄測試結果 測試次數使用cursor方式(TD)使用PL/SQL方式(WCDMA)10"0"214"1"39"0"413"1"510"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記錄:)declarei 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];

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 北票市| 永宁县| 太白县| 泾源县| 界首市| 沂南县| 文登市| 高陵县| 镇宁| 遂平县| 民乐县| 黎川县| 府谷县| 共和县| 尚义县| 麻江县| 怀集县| 十堰市| 定结县| 天门市| 阳高县| 监利县| 太白县| 大宁县| 丘北县| 海晏县| 辽中县| 新宁县| 嘉善县| 平阳县| 大庆市| 绥滨县| 深泽县| 绥中县| 巫山县| 阳原县| 沭阳县| 诏安县| 冷水江市| 连平县| 玉林市|