Einzelnen Beitrag anzeigen

Monday

Registriert seit: 24. Aug 2012
103 Beiträge
 
FreePascal / Lazarus
 
#1

Kleiner Geschwindigkeitstest von Insert

  Alt 18. Dez 2016, 08:31
Datenbank: SQLITE • Version: 3 • Zugriff über: Zeos
Hallo,

mich hat es interessiert, wie sich die Geschwindigkeiten von

Inserts bei SQLite3 und Zeos

verändern, mit unterschiedlichen "schreibweisen"; Und habe festgestellt, dass es durchaus erhebliche Unterschiede geben kann.

Ich habe den Test mehrmals durchlaufen, auch mit unterschiedlichen Zahlen und habe folgende Durchschnittszeiten bekommen:



Hier die sortierte Ergebnisse:
Code:
Benötigte Zeit %      Funktionsname
1,20 %                Test4 (Insert; in Transaction, außerhalb der Funktion)
1,21 %                Test3 (Insert; in Transaction innerhalb der Funktion)
97,58 %               TEst1 (Insert und exec... direkt hintereinander)



(Funktion 2 hat im Test nicht teilgenommen. Ich war der Annahme, es ist auch mögliche mehrere Inserts mit add zu schreiben, doch das ist so nicht möglich.)


Hier die verschiedene Abschnitte:


Derzeit aktuelle Tabelle im Beitrag:
http://www.delphipraxis.net/1356490-post5.html



Delphi-Quellcode:
function test1(testzahl:integer): string;
var
  a: integer;
begin
  for a := 1 to testzahl do begin
    Form1.ZQuery1.SQL.Text := 'Insert into daten2 (zahl) values (:zahl)';
    Form1.ZQuery1.ParamByName('zahl').AsInteger := a;
    Form1.ZQuery1.ExecSQL;
  end;
end;



function test2(testzahl:integer): string;
var
  a: integer;
begin
  Form1.ZQuery1.SQL.Clear;
  for a := 1 to testzahl do begin
    Form1.ZQuery1.SQL.add('Insert into daten2 (zahl) values (:zahl);');
    Form1.ZQuery1.ParamByName('zahl').AsInteger := a;
  end;
   Form1.ZQuery1.ExecSQL;
end;



function test3(testzahl:integer): string;
var
  a: integer;
begin
  Form1.ZQuery1.SQL.text := 'begin transaction;';
  Form1.ZQuery1.ExecSQL;

    Form1.ZQuery1.SQL.Text := '';
  for a := 1 to testzahl do begin
    Form1.ZQuery1.SQL.text := 'Insert into daten2 (zahl) values (:zahl);';
    Form1.ZQuery1.ParamByName('zahl').AsInteger := a;
      Form1.ZQuery1.ExecSQL;
  end;

  Form1.ZQuery1.SQL.text := 'Commit;';
  Form1.ZQuery1.ExecSQL;
end;




function test4(testzahl:integer): string;
var
  a: integer;
begin
    Form1.ZQuery1.SQL.Text := '';
  for a := 1 to testzahl do begin
    Form1.ZQuery1.SQL.text := 'Insert into daten2 (zahl) values (:zahl);';
    Form1.ZQuery1.ParamByName('zahl').AsInteger := a;
      Form1.ZQuery1.ExecSQL;
  end;
end;


//START der Funktionen:
  Form1.ZQuery1.SQL.Text := 'Delete from daten2'; Form1.ZQuery1.ExecSQL;
  test1(testzahl);

  Form1.ZQuery1.SQL.Text := 'Delete from daten2'; Form1.ZQuery1.ExecSQL;
  test3(testzahl);

  Form1.ZQuery1.SQL.Text := 'Delete from daten2'; Form1.ZQuery1.ExecSQL;
  Form1.ZQuery1.SQL.text := 'begin transaction;'; Form1.ZQuery1.ExecSQL;
  test4(testzahl);
  Form1.ZQuery1.SQL.text := 'Commit;'; Form1.ZQuery1.ExecSQL;



LG
Monda<

Geändert von Monday (18. Dez 2016 um 15:38 Uhr)
  Mit Zitat antworten Zitat