Einzelnen Beitrag anzeigen

Benutzerbild von IBExpert
IBExpert

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

Re: Schnellste Insert Möglichkeit für eine DB?

  Alt 3. Mär 2010, 17:50
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:
1 2 abc xy 5
2 1 asd yss 7
4 1 bbs ddd 5
die datei dann zum Beispiel als c:\dat.txt speichern

dann in firebird

SQL-Code:
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
als interne tabelle zum Beispiel

SQL-Code:
create table dat
(id integer,
zahl integer,
txt char(4),
txt2 char(3),
zahl2 integer)

dann in firebird

insert into dat select id,zahl,txt,zahl2,txt2 from dat_ext
und dann ganz einfach

drop table dat_ext; 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.

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
Holger Klemt
www.ibexpert.com - IBExpert GmbH
Oldenburger Str 233 - 26203 Wardenburg - Germany
IBExpert and Firebird Power Workshops jederzeit auch als Firmenschulung
  Mit Zitat antworten Zitat