私は3つのデータフィールドを持つ簡単なinsert文を持っています。 プライマリキーで自動インクリメントではないTag_ID 簡単なDateTime Nowを文字列として保存するタイムスタンプ、および単純な除算計算を含むfloat値。ms sql lazarusでパフォーマンスを向上させる
実際にはSQL Serverはローカルですが、後でローカルネットワークにない別のマシンに置かれます。今私は10.000のエントリのための25,8秒を得る..どのように私はこれを改善することができますか?
私のコードは次のようになります。
procedure TForm1.testMssql(Datensaetze: integer);
var
i: integer;
before,after,result: real;
begin
before := GetTickCount;
for i:= 0 to Datensaetze do
begin
try
query.DataBase := conn;
query.UsePrimaryKeyAsKey:=false;
query.SQL.Text := 'insert into speedTest(TagID,timestamp,Value) values(:tag_id,:timestamp, :value)';
query.Params.ParamByName('tag_id').AsInteger := i ;
query.Params.ParamByName('timestamp').AsString := DateTimeToStr(Now);
query.Params.ParamByName('value').AsFloat := ((i*2)/55);
query.ExecSQL;
SQLTransaction1.Commit;
except
on E: Exception do
ShowMessage(E.Message);
end;
end;
after := GetTickCount;
result := (after - before)/1000;
Memo1.Text := FloatToStr(result);
end;
バッチ処理を望むもう一つの理由は、すべての個々の 'commit'ステートメントが物事を大幅に遅くするということです。 –