這是我為公司做的一份ado和bde的速度測試報告﹕
發現ado的速度隨數據的增大而直線上升﹐所以我公司目前以否定了ado.
給各位提供參
紀錄數為:300條﹐1000條﹐5000條﹐10000條
關于ADO和BDE的速度的測試報告
一. 測試原因
ADO為微軟大力推荐的數據連接﹐連接速度快,以后在升級方面能得到相關的技朮支持﹐且不用太多配置﹐所以決定以后用ADO來代替現有的BDE數據連接.現進行關于ADO和BDE的運行和數據連接速度的測試臉。
二. 測試環境
CPU
II450
網速:10.0Mbps
操作系統: Microsoft Windows 2000 Server
內存:128M
數據庫
racle8.16
數據庫IP:192.168.0.33
測試代碼的開發工具:delphi5.0
BDE:
ADO:
表結構: CREATE TABLE TEST1 (
TESTID NUMBER NOT NULL,
TESTNUM NUMBER NOT NULL)
三. 測試代碼
unit Unitado;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, DBTables, Db, ADODB;
type
TForm1 = class(TForm)
Database1: TDatabase;
ADOConnection1: TADOConnection;
ADOQuery1: TADOQuery;
Query1: TQuery;
Button1: TButton;
Edit1: TEdit;
Edit2: TEdit;
Button2: TButton;
Label1: TLabel;
Label2: TLabel;
Button3: TButton;
Edit3: TEdit;
Edit4: TEdit;
Button4: TButton;
Label3: TLabel;
Label4: TLabel;
Edit5: TEdit;
Label5: TLabel;
Edit6: TEdit;
Label6: TLabel;
Label7: TLabel;
Edit7: TEdit;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
procedure Button4Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.DFM}
procedure TForm1.Button1Click(Sender: TObject);
var
i,FirstTickCount,FirstTickCount1,sum:integer;
begin
Query1.Close;
Query1.sql.Clear;
Query1.SQL.Text := 'select * from test1';
FirstTickCount := gettickcount;
Query1.Prepare;
Query1.Open;
Edit6.Text := inttostr(gettickcount-FirstTickCount);
Query1.First;
for i := 0 to Query1.RecordCount - 1 do
begin
sum := sum + Query1.fieldbyname('testnum').value;
Query1.Next;
end;
Edit1.Text := inttostr(gettickcount-FirstTickCount);
//showmessage(inttostr(sum));
end;
procedure TForm1.Button2Click(Sender: TObject);
var
i,sum,FirstTickCount:integer;
begin
ADOQuery1.Close;
ADOQuery1.sql.Clear;
ADOQuery1.SQL.Text := 'select * from test1 ';
FirstTickCount := gettickcount;
ADOQuery1.Open;
Edit7.Text := inttostr(gettickcount-FirstTickCount);
ADOQuery1.First;
for i := 0 to ADOQuery1.RecordCount - 1 do
begin
sum := sum + ADOQuery1.fieldbyname('testnum').value;
ADOQuery1.Next;
end;
Edit2.Text := inttostr(gettickcount-FirstTickCount);
// showmessage(inttostr(sum));
end;
procedure TForm1.Button3Click(Sender: TObject);
var
i,FirstTickCount,sum:integer;
begin
Query1.Close;
Query1.sql.Clear;
Query1.SQL.Text := 'select * from test1 where testid='+Edit5.text;
// Query1.Prepare;
FirstTickCount := gettickcount;
Query1.Open;
sum := Query1.fieldbyname('testnum').value;
Edit3.Text := inttostr(gettickcount-FirstTickCount);
//showmessage(inttostr(sum));
end;
procedure TForm1.Button4Click(Sender: TObject);
var
i,sum,FirstTickCount:integer;
begin
ADOQuery1.Close;
ADOQuery1.sql.Clear;
ADOQuery1.SQL.Text := 'select * from test1 where testid='+Edit5.text;
FirstTickCount := gettickcount;
ADOQuery1.Open;
sum := ADOQuery1.fieldbyname('testnum').value;
Edit4.Text := inttostr(gettickcount-FirstTickCount);
end;
四. 測試數據
1. 紀錄count:300
a. 描述: Query.sql.text:= ‘select * from test1’
Query 打開時間
BDE_Time ADO_Time
第一次 3184 210
第二次 10 190
第三次 10 191
b. 描述: Query.sql.text:= ‘select * from test1’
Query 打開+合計時間
BDE_Time ADO_Time
第一次 3314 250
第二次 160 220
第三次 140 231
c. 描述: Query.sql.text:= ‘select * from test1 where testid= 235’
Query 打開時間
BDE_Time ADO_Time
第一次 3125 50
第二次 0 30
第三次 10 20
2. 紀錄count:1000
a. 描述: Query.sql.text:= ‘select * from test1’
Query 打開時間
BDE_Time ADO_Time
第一次 3074 461
第二次 0 431
第三次 0 411
b. 描述: Query.sql.text:= ‘select * from test1’
Query 打開+合計時間
BDE_Time ADO_Time
第一次 3515 631
第二次 451 601
第三次 450 591
c. 描述: Query.sql.text:= ‘select * from test1 where testid= 768’
Query 打開時間
BDE_Time ADO_Time
第一次 5578 60
第二次 0 30
第三次 10 20
3. 紀錄count:5000
a. 描述: Query.sql.text:= ‘select * from test1’
Query 打開時間
BDE_Time ADO_Time
第一次 3074 2093
第二次 0 2043
第三次 10 2083
b. 描述: Query.sql.text:= ‘select * from test1’
Query 打開+合計時間
BDE_Time ADO_Time
第一次 5267 4537
第二次 2243 4506
第三次 2404 4496
c. 描述: Query.sql.text:= ‘select * from test1 where testid= 3261’
Query 打開時間
BDE_Time ADO_Time
第一次 3015 60
第二次 10 40
第三次 10 30
4. 紀錄count:10000
a. 描述: Query.sql.text:= ‘select * from test1’
Query 打開時間
BDE_Time ADO_Time
第一次 9043 4637
第二次 10 4456
第三次 0 5338
b. 描述: Query.sql.text:= ‘select * from test1’
Query 打開+合計時間
BDE_Time ADO_Time
第一次 13970 13490
第二次 4757 13249
第三次 4486 14210
c. 描述: Query.sql.text:= ‘select * from test1 where testid= 4567’
Query 打開時間
BDE_Time ADO_Time
第一次 6910 80
第二次 10 30
第三次 10 30