3 개의 데이터 필드가있는 간단한 insert 문이 있습니다. 기본 키가 아니고 자동 증가가 아닌 Tag_ID, 쉬운 DateTime Now를 문자열로 저장하고 간단한 계산을 포함하는 float 값을 저장하는 타임 스탬프입니다.ms sql 삽입 성능 (나사로 포함)
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)'문이 크게 느려지 게된다는 것입니다. –