![]() |
Datenbank: Firebird embedded • Version: 2.1 • Zugriff über: per TSQLQuery
Firebird Import aus Textdatei extrem langsam
Hallo zusammen!
Ich habe ein massives Problem beim Import von Daten aus einer Textdatei in eine Firebird-DB. Die Laufzeit ist schlicht und einfach katastrophal. Für je 100 Datensätze mit gerade mal 5 lumpigen Textfeldern benötigt das Programm ca. 1 Sekunde. Macht bei ca. 110000 Datensätzen also 1100 Sekunden bzw. fast 20 Minuten. Das Lesen der Daten inkl. Split der einzutragenden Felder sowie Aufbau eines passenden INSERT-Statements benötigt gerade mal 32 Sekunden. Die gesamte Zeit scheint daher alleine von einem einzigen SQL-Statement pro Satz aufgefressen zu werden. Woran kann das liegen? Wäre für jede Idee dankbar ... Gruß globetrotter77 |
Re: Firebird Import aus Textdatei extrem langsam
oder ist das etwa normal, dass es so lange dauert?
liegt es an Firebird oder an der TSQLQuery-Komponente? in der vorherigen Version habe ich noch mit der leider ja hoffnungslos veralteten BDE gearbeitet und durchaus vernünftige Laufzeiten erreicht. hat jemand Erfahrung mit Datenimport in Firebird? wie macht man's geschickterweise? und richtig schnell? |
Re: Firebird Import aus Textdatei extrem langsam
Was ist TSqlQuery ? :shock: Faktor 10-100 ist allerdings nicht ungewöhnlich, sofern WinApi Funktionen verwendet werden. Memo, Listbox, Stringgrid etc. Die Aktualisierung / Anzeige dauert da ewig. 8)
|
Re: Firebird Import aus Textdatei extrem langsam
ist schon klar, dass manche Funktionen ewig dauern, aber bei ist der Unterschied tatsächlich reduzierbar auf die Ein-/Ausblendung von
Delphi-Quellcode:
Gibt es eine andere Komponente, mit der man direkte SQL-Statements abgeben kann?with DM_User.SQLQueryTemp do begin with SQL do begin Clear; Add(sqltxt); end; ExecSQL(true); end; Ich gebe zu, dass ich mich da nicht besonders auskenne ... habe früher immer die BDE und Paradox benutzt und war eigentlich immer zufrieden ... nachdem die aber mittlerweile so richtig veraltet ist, wollte ich mal anders rangehen ... leider nur mit mässigem Erfolg |
Re: Firebird Import aus Textdatei extrem langsam
Kombination von Clear und Add ist schon gut. :mrgreen:
|
Re: Firebird Import aus Textdatei extrem langsam
Vielleicht hilft dir ja...
Code:
weiter.
CREATE TABLE tabelle EXTERNAL FILE 'file.txt' (...);
Add: Oder du baust dir ein SQL-Statement, dass alle INSERTs auf einmal durchführt...
SQL-Code:
INSERT INTO tabelle
SELECT FIRST 1 feld1, feld2, ... FROM tabelle UNION SELECT FIRST 1 feld1, feld2, ... FROM tabelle : : |
Re: Firebird Import aus Textdatei extrem langsam
über external file habe ich auch schon nachgedacht, aber ich habe das Problem, dass ich davon ausgehen muss, dass doppelte Schlüssel vorkommen ... wie geht der Import via external file damit um?
im Augenblick löse ich das durch ein try-except-Konstrukt ... und wie definiere ich in einem external file Datumswerte? hat jemand Erfahrung? |
Re: Firebird Import aus Textdatei extrem langsam
Zitat:
|
Re: Firebird Import aus Textdatei extrem langsam
Zitat:
Mach es so...
Delphi-Quellcode:
SQLQueryTemp.SQL.Text:=sqltxt;
SQLQueryTemp.ExecSQL(true); Zitat:
SQL-Code:
...und mache danach einen Import in eine andere Tabelle...
CREATE TABLE tabelle EXTERNAL FILE 'file.txt' (feld1 INT, feld2 CHAR(10));
SQL-Code:
Da hier die Feldinhalte eine konstante Größe (mit Leerzeichen gefüllt) haben müssen, kannst du in diesem Schritt auch gleich die Zeichenketten trimmen.
INSERT INTO richtige_tabelle
SELECT DISTINCT feld1, TRIM(feld2) FROM tabelle Zitat:
|
Re: Firebird Import aus Textdatei extrem langsam
Zitat:
Zitat:
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:04 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