看一下我们的表格构 :
TInteger 表是用自动加 1 字段做为主键 (PInt)
TGuid 表是用 GUID 做为主键 (PGUID)
PComb 表是用 Comb 做为主键 (PComb)
PComb2 表是用改过后的 Comb 做为主键 (PComb, 第四种情况 )
在这四表中还有一列 ,NInt, 用于插入一个数值 , 随机的 , 没有什么实际的意义
下面先看一下我们的测试界面 :
插入数据是指在数据库的四个表中插入指定条目的数据 .
Count() 是在四个表中用 select cocunt() as rc from table 做统计查询
Count 是在四个表中用 select cocunt( 主键 ) as rc from table 做统计查询
Label3,Label5,Label7,Label9 分别是四个表所运行的时间 .
下面是测试程序 :
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls,Activex,SSystemUnit, ADODB, DB;
type
TForm1 = class(TForm)
ADOConnection1: TADOConnection;
ADOCommand1: TADOCommand;
Edit1: TEdit;
Button1: TButton;
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
Label4: TLabel;
Label5: TLabel;
Label6: TLabel;
Label7: TLabel;
Button2: TButton;
Button3: TButton;
Label8: TLabel;
Label9: TLabel;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
private
{ Private declarations }
procedure InsertComb(cc : integer);
procedure InsertComb2(cc : integer);
procedure InsertGuid(cc : integer);
procedure insertInt(cc : integer);
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
var
TotalTime : Cardinal;
cc : integer;
begin
cc:= strtoint(Edit1.Text);
TotalTime := GetTickCount;
insertInt(cc);
TotalTime := GetTickCount - TotalTime;
Label3.Caption := inttostr(TotalTime);
TotalTime := GetTickCount;
InsertGuid(cc);
TotalTime := GetTickCount - TotalTime;
Label5.Caption := inttostr(TotalTime);
TotalTime := GetTickCount;
InsertComb(cc);
TotalTime := GetTickCount - TotalTime;
Label7.Caption := inttostr(TotalTime);
TotalTime := GetTickCount;
InsertComb2(cc);
TotalTime := GetTickCount - TotalTime;
Label9.Caption := inttostr(TotalTime);
end;
procedure TForm1.InsertComb(cc : integer);
var
i : integer;
begin
ADOCommand1.CommandText :='Insert into TComb(PComb,NInt) values(:PComb,:NInt)';
ADOCommand1.Prepared := true;
For i:= 0 to cc-1 do
begin
ADOCommand1.Parameters[0].Value := SSystem.GetGuidString(SSystem.GetCombGUID(),'','','');
ADOCommand1.Parameters[1].Value := i/7;
ADOCommand1.Execute;
end;
end;
procedure TForm1.InsertComb2(cc: integer);
var
i : integer;
//combStr : string;
begin
ADOCommand1.CommandText :='Insert into TComb2(PComb,NInt) values(:PComb,:NInt)';
ADOCommand1.Prepared := true;
For i:= 0 to cc-1 do
begin
//combStr :=
//combstr := copy(combstr,21,32)+copy(combstr,1,20);
ADOCommand1.Parameters[0].Value := SSystem.GetGuidString2(SSystem.GetCombGUID(),'','','');;
ADOCommand1.Parameters[1].Value := i/7;
ADOCommand1.Execute;
end;
end;
procedure TForm1.InsertGuid(cc : integer);
var
i : integer;
guid : TGUID;
begin
ADOCommand1.CommandText :='Insert into TGuid(PGuid,NInt) values(:PGuid,:NInt)';
ADOCommand1.Prepared := true;
For i:= 0 to cc-1 do
begin
CoCreateGUID(guid);
ADOCommand1.Parameters[0].Value := SSystem.GetGuidString(guid,'','','');
ADOCommand1.Parameters[1].Value := i/7;
ADOCommand1.Execute;
end;
end;
procedure TForm1.insertInt(cc : integer);
var
i : integer;
begin
ADOCommand1.CommandText :='Insert into TInteger(NInt) values(:NInt)';
ADOCommand1.Prepared := true;
For i:= 0 to cc-1 do
begin
ADOCommand1.Parameters[0].Value := i/7;
ADOCommand1.Execute;
end;
end;
procedure TForm1.Button2Click(Sender: TObject);
var
TotalTime : Cardinal;
begin
TotalTime := GetTickCount;
ADOCommand1.CommandText :='select count(*) as ttc from TInteger';
ADOCommand1.Execute;
TotalTime := GetTickCount - TotalTime;
Label3.Caption := inttostr(TotalTime);
TotalTime := GetTickCount;
ADOCommand1.CommandText :='select count(*) as ttc from TGuid';
ADOCommand1.Execute;
TotalTime := GetTickCount - TotalTime;
Label5.Caption := inttostr(TotalTime);
TotalTime := GetTickCount;
ADOCommand1.CommandText :='select count(*) as ttc from Tcomb';
ADOCommand1.Execute;
TotalTime := GetTickCount - TotalTime;
Label7.Caption := inttostr(TotalTime);
TotalTime := GetTickCount;
ADOCommand1.CommandText :='select count(*) as ttc from Tcomb2';
ADOCommand1.Execute;
TotalTime := GetTickCount - TotalTime;
Label9.Caption := inttostr(TotalTime);
end;
procedure TForm1.Button3Click(Sender: TObject);
var
TotalTime : Cardinal;
begin
TotalTime := GetTickCount;
ADOCommand1.CommandText :='select count(PInt) as ttc from TInteger';
ADOCommand1.Execute;
TotalTime := GetTickCount - TotalTime;
Label3.Caption := inttostr(TotalTime);
TotalTime := GetTickCount;
ADOCommand1.CommandText :='select count(PGuid) as ttc from TGuid';
ADOCommand1.Execute;
TotalTime := GetTickCount - TotalTime;
Label5.Caption := inttostr(TotalTime);
TotalTime := GetTickCount;
ADOCommand1.CommandText :='select count(PComb) as ttc from Tcomb';
ADOCommand1.Execute;
TotalTime := GetTickCount - TotalTime;
Label7.Caption := inttostr(TotalTime);
TotalTime := GetTickCount;
ADOCommand1.CommandText :='select count(PComb) as ttc from Tcomb2';
ADOCommand1.Execute;
TotalTime := GetTickCount - TotalTime;
Label9.Caption := inttostr(TotalTime);
end;
end.
很简单的代码 , 无需加说明了 .