![]() |
Re: Schnellste Insert Möglichkeit für eine DB?
Zitat:
Zitat:
Jürgen |
Re: Schnellste Insert Möglichkeit für eine DB?
@Jürgen Thomas: Das mit den Paramtern kannte ich schon :) Meine Frage hatte eher etwas mit der Speicherwaltung zu tun, wenn ich einen String über "+" zusammenbaue. Man merkt vor allem schnell, dass es zu einem Problem werden kann, wenn man verschiedene Dateitypen in eine DB klopfen kann und das über einen einzigen SQL-String machen will. Man muss die Logik der Params halt selbst basteln -> unnötige Arbeit.
Zitat:
|
Re: Schnellste Insert Möglichkeit für eine DB?
wenn du es von der Applikationsseite wirklich schnell haben willst, dann achte auf die Transaktionssteuerung und auf das prepare außerhalb der schleife und tausche innerhalb der Schleife nur noch die parameter aus. Bei jedem execsql kommt dann sonst ein riesen overhead zu stande. Den Tip von hoika also auf jeden Fall ernst nehmen. Wenn du jedoch in der Schleife das SQL änderst, dann macht der client beim server sowieso ein unprepare und ein neues prepare mit jedem execsql. Damit würdest du wieder Geschwindigkeit verlieren.
Wenn die Daten zum Beispiel als Datei vorliegen, dann konvertier ich die lieber mit Delphi in ein Fixed format (pro zeile wird jedes feld mit Leerzeichen aufgefüllt). von csv
SQL-Code:
ID;ZAHL;TXT;TXT2;ZAHL2
1;2;abc;xy;5 2;1;asd;yss;7 4;1;bbs;ddd;5 in fixed format, z.B.
SQL-Code:
die datei dann zum Beispiel als c:\dat.txt speichern
1 2 abc xy 5
2 1 asd yss 7 4 1 bbs ddd 5 dann in firebird
SQL-Code:
als interne tabelle zum Beispiel
create table dat_ext external file 'C:\dat.txt'
(id char(3), zahl char(2), txt char(4), txt2 char(3), zahl2 char(1), crlf char(2)) --zeilenumbruch in Textdatei belegt bei windoof 2 byte
SQL-Code:
create table dat
(id integer, zahl integer, txt char(4), txt2 char(3), zahl2 integer) dann in firebird
SQL-Code:
insert into dat select id,zahl,txt,zahl2,txt2 from dat_ext
und dann ganz einfach
SQL-Code:
damit bekommst du locker 20000 bis 100000 records pro sekunde in die Datenbank. Das geht in einer Transaktion mit wenigen execsqls, dabei ist dann der prepare auch egal.
drop table dat_ext;
Das entspricht dem Tip von chaosben und schlägt alle anderen verfahren um längen. So ein Präprozessor, also ein simples Programm was aus deinen vorhandenen Daten eben so ein fixed format erzeugt ist in Delphi sogar mit TStringlist schnell zusammengeklöppelt und braucht sicherlich auch für 100000 records weniger als eine Sekunden, wenn das nicht ganz bescheuert programmiert ist. Schöne Grüße |
Re: Schnellste Insert Möglichkeit für eine DB?
Zitat:
Ich beziehe mich hier mal auf ADO-Komponenten. Wenn man einen INSERT direkt über Connnection.Execute('INSERT INTO ....') einreicht, dann ist man deutlich schneller als wenn man dies über eine ADOQuery oder ADOCommand tut. Auch bei anderen Datenbank-Komponenten, die das Konzept einer Connection haben muss das so sein. Letztendlich gibt eine Query ihren SQL-Befehl immer an die Connection- oder Database-Komponenten weiter. |
Re: Schnellste Insert Möglichkeit für eine DB?
Zitat:
Gruß K-H |
Re: Schnellste Insert Möglichkeit für eine DB?
Zitat:
|
Re: Schnellste Insert Möglichkeit für eine DB?
Zitat:
TQuery bietet jede Menge Komfort (Parameter, Events,..) der halt etwas Zeit kostet. |
Re: Schnellste Insert Möglichkeit für eine DB?
Hallo Berhard
Zitat:
Code:
wie willst Du das mit Parametern erledigen?
select tabtyp from Tabelle1;
case tabtyp of Akte1 : sqltext:= 'select info from Tabelle2'; Akte2 : sqltext:= 'select info from Tabelle3'; Akte3 : sqltext:= 'select info1 from Tabelle4,Tabelle5 where Tabelle4.xid=Tabelle5.txid'; usw. solche Konstrukte wie
Code:
sind natürlich tödlich.
sqltext:='select adresse from tabelle1 where vorname='+form1.edit1.text+';'
und auch soetwas kommt auch nicht in die Tüte:
Code:
Gruß
sqltext:='select adresse from tabelle1 where vorname='+Listbox1.items[listbox1.selected]+';'
K-H |
Re: Schnellste Insert Möglichkeit für eine DB?
Zitat:
|
Re: Schnellste Insert Möglichkeit für eine DB?
Zitat:
Gruß K-H |
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:54 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