Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Kleiner Geschwindigkeitstest von Insert (https://www.delphipraxis.net/191189-kleiner-geschwindigkeitstest-von-insert.html)

nahpets 18. Dez 2016 16:10

AW: Kleiner Geschwindigkeitstest von Insert
 
Zitat:

Zitat von mensch72 (Beitrag 1356500)
na wenn jetzt das "Form" noch wegfällt, wären wir bei der Version, welche nach meinem Bauchgefühl am schnellsten und "am saubersten" wäre :)
Delphi-Quellcode:
function test3a(testzahl: integer): string;
var
  a: integer;
  p: TParam;
begin
  Form1.ZQuery1.SQL.Text := 'begin transaction;';
  Form1.ZQuery1.ExecSQL;
  Form1.ZQuery1.SQL.Text := 'Insert into daten2 (zahl) values (:zahl);';
  Form1.ZQuery1.Prepare;
  p := Form1.ZQuery1.ParamByName('Zahl');
  for a := 1 to testzahl do
  begin
    p.AsInteger := a;
    Form1.ZQuery1.ExecSQL;
  end;
  Form1.ZQuery1.SQL.Text := 'Commit;';
  Form1.ZQuery1.ExecSQL;
end;

Könntest Du Dich damit anfreunden?
Delphi-Quellcode:
function test3a(qry : TZQuery; testzahl: integer): string;
var
  a: integer;
  p: TParam;
begin
  qry.SQL.Text := 'begin transaction;';
  qry.ExecSQL;
  qry.SQL.Text := 'Insert into daten2 (zahl) values (:zahl);';
  qry.Prepare;
  p := qry.ParamByName('Zahl');
  for a := 1 to testzahl do
  begin
    p.AsInteger := a;
    qry.ExecSQL;
  end;
  qry.SQL.Text := 'Commit;';
  qry.ExecSQL;
end;
Der weiter oben beschriebene Aufruf wäre dann:
Delphi-Quellcode:
Form1.ZQuery1.SQL.Text := 'Delete from daten2';
Form1.ZQuery1.ExecSQL;
test3a(Form1.ZQuery1,testzahl);
Wobei das auch noch schöner ginge.

Befinden sich Test3a ... im Quelltext von Form1, dann ist das hier überflüssig.
Delphi-Quellcode:
ZQuery1.SQL.Text := 'Delete from daten2';
ZQuery1.ExecSQL;
test3a(ZQuery1,testzahl);
Kann SQLite eigentlich auch
Delphi-Quellcode:
ZQuery1.SQL.Text := 'truncate table daten2';
ZQuery1.ExecSQL;
test3a(ZQuery1,testzahl);

Monday 18. Dez 2016 16:48

AW: Kleiner Geschwindigkeitstest von Insert
 
bnreimer:
Die Transaction läuft über SQLite, nicht über Zeos ( siehe auch Test8 ohne Transaction und Test9 mit Transaction).

Welche Funktion die AutoCommit bei Zeos haben soll bzw. wie man sie einsetzt weiß ich nicht; Scheint bei SQLite nicht notwendig zu sein. Testhalber habe ich AutoCommit mal False, mal True gemacht; Jedoch ohne Unterschied. Aber wie gesagt, ich kenne mich bei dem AutoCommit von Zeos nicht aus.



truncate kennt SQLite nicht.

bnreimer42 18. Dez 2016 17:02

AW: Kleiner Geschwindigkeitstest von Insert
 
Zitat:

Zitat von Monday (Beitrag 1356504)
bnreimer:
Die Transaction läuft über SQLite, nicht über Zeos ( siehe auch Test8 ohne Transaction und Test9 mit Transaction).

Welche Funktion die AutoCommit bei Zeos haben soll bzw. wie man sie einsetzt weiß ich nicht; Scheint bei SQLite nicht notwendig zu sein. Testhalber habe ich AutoCommit mal False, mal True gemacht; Jedoch ohne Unterschied. Aber wie gesagt, ich kenne mich bei dem AutoCommit von Zeos nicht aus.
...

Transaktionen laufen - wenn - immer im darunterliegenden Datenbanksystem, nicht in ZEOS oder einer anderen Clientbibliothek.
Aber ZEOS steuert diese und es ist ein Unterschied, ob man ein Skript schreibt oder mit Delphi Komponenten arbeitet. Und es kommt auch drauf an, welche Komponenten man nimmt, ob eine Query oder eine Skriptkomponente.

Um das sicher zu wissen, muss man sowohl bei SQLLITE als auch bei ZEOS schauen, wie das Transaktionshandling ist oder zusätzlich über einen Monitor schauen, was die Kommunikation zwischen Client und Server macht.

Aber ist natürlich nur nötig, wenn man es ganz genau wissen will und davon gehe ich aus, wenn man schon einen Benchmark schreibt.

Gruß


Alle Zeitangaben in WEZ +1. Es ist jetzt 16:35 Uhr.
Seite 2 von 2     12   

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz