Einzelnen Beitrag anzeigen

Benutzerbild von IBExpert
IBExpert

Registriert seit: 15. Mär 2005
646 Beiträge
 
FreePascal / Lazarus
 
#30

AW: Insert Optimierung

  Alt 4. Mär 2012, 11:15
kleiner Tip:

wenn es wirklich um gleichartige einfache inserts geht, dann sparst du eine Menge zeit über execute block
d.h.statt jedes insert statement mit execute/execsql senden stellt du dir deine inserts in einem Block
zusammen.

Code:
execute block
as
begin
  insert into tbl(id,txt) values (1,'A');
  insert into tbl(id,txt) values (2,'B');
  insert into tbl(id,txt) values (3,'C');
  --...
  insert into tbl(id,txt) values (26,'Z');
end
das kannst du dann mit den meisten t*query oder T*sql Komponenten als ein Befehl
mit execsql zum Server senden. So einen Block kann bis zu 32k lang sein, d.h. es
passen reichlich inserts in einen Befehl.

Über external files zu gehen ist zwar noch schneller, aber setzt voraus, das dein
Firebird Client und der Firebird Server auf einen gemeinsamen Festplattenbereich
zugreifen können, das ist nicht immer gewünscht.

Ab einer gewissen Anzahl parametern ist die Parametrisierung von statements eher langsamer
als schneller, und man sollte wissen, das bei o.a. Verfahren ca. 10 Datenpakete auf TCP/IP
Ebene zwischen Server und Client hin und her geschickt werden, bei 26 Einzelstatements
kommst du parametrisiert auf geschätzt mindestens 200 Datenpakete. Bei jedem Datenpaket
musst du immer die Latenzzeit mit einrechnen (wie lange braucht ein Ping).

Je mehr Records und je mehr Parameter, um so mehr lohnt sich das execute block verfahren!

Execute block ist seit Firebird 2 Standard und hat nichts mit execute ibeblock zu tun, was man
nur in IBExpert Tools nutzen kann.
Holger Klemt
www.ibexpert.com - IBExpert GmbH
Oldenburger Str 233 - 26203 Wardenburg - Germany
IBExpert and Firebird Power Workshops jederzeit auch als Firmenschulung

Geändert von IBExpert ( 4. Mär 2012 um 11:19 Uhr)
  Mit Zitat antworten Zitat