![]() |
AW: Insert Optimierung
Bei Anzahl 30 werden 30 Insertbefehle in einem Rutsch ausgeführt (siehe Fehlermeldung 30x insert). Bei Anzahl 1 demzufolge nur 1 Insert.
|
AW: Insert Optimierung
Schon klar.
Ich meinte in Bezug auf das Funktionieren, bzw. die Fehlermeldung. :stupid: |
AW: Insert Optimierung
Zitat:
|
AW: Insert Optimierung
Mit der 30 ist es doch in einer Exception geendet.
Passiert das auch mit einer 1, bei diesem Code? |
AW: Insert Optimierung
bei Anzahl = 1 : keine Fehlermeldung, Die Tabelle wird erstellt.
Schon bei Anzahl = 2 : obige Fehlermeldung (nur stark verkürzt 2 Einträge). Keine Erstellung der Tabelle. |
AW: Insert Optimierung
Ein TZQuery kann aber nur einfache Statements ausführen und kein Skript. Dafür gibt es TZSqlProcessor
|
AW: Insert Optimierung
Ich dachte Firebird kennt die meisten SQL-Features. :gruebel:
Und irgendwie muß man doch mehrere SQL-Befehle zusammen abschicken können? Eventuell noch INSERT SELECT UNION SELECT ... ![]() oder eine anonyme Funktion/Block drumrum. [edit] Oh, wo kommt denn mkinzler's Antwort her? :shock: Der TZSqlProcessor schickt das zusammen ab, oder zerlegt und versendet er das einzeln? |
AW: Insert Optimierung
Zitat:
2er Gedanke: gibt's Literatur, Anwendungsbeispiele etc. |
AW: Insert Optimierung
|
AW: Insert Optimierung
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:
das kannst du dann mit den meisten t*query oder T*sql Komponenten als ein Befehl
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 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. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:18 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz