Massig Daten in DB mit teils existierenden Einträgen importieren

21/10/2008 - 17:05 von Andy Dorwald | Report spam
Hallo NG.

ich muss massig Daten in meine DB (übrigens: einmal ist es eine Jet und
einmal ist es ein SQL-Server) mit teils existierenden Eintràgen importieren.

Wie mache ich das, um die beste Performance zu erhalten?




Variante 1:






Einfach stàndig den neuen Datensatz per ADDNew reinloppen und Index-Fehler
(wegen doppelter Eintràge) ignorieren/überspringen
Hier sehe ich aber das Problem, dass oftmals unnötig der ganze Datensatz
erst mal zur DB geschaufelt wird, obgleich dann oftmals
erkannt wird, dass der Datensatz bereits existiert. Und da es teils größere
Dateninhalte sind, halte ich es nicht unbedingt für den richtigen Weg.
Das ganze làuft per UpdateBatch! Geht das denn überhaupt, wenn
Index-Verletzungen dabei sind - bzw. bricht UpdateBatch ab, sobald ein
Datensatz bereits existiert?




Variante 2:






Vor jedem Einfügen, brav überprüfen, ob der Eintrag bereits existiert (jeder
Eintrag ha eine eindeutige GUID).
Diesen Weg gehe ich derzeit, habe aber die Befürchtung, dass es recht
inperfomant ist, da ich für jeden Satz erst mal ein SELECT mache
Das ganze làuft per UpdateBatch!




Variante 3:






Ich öffne die Tabelle, in der die Daten rein sollen mit einem Recordset und
prüfe vor jedem AddNew
per rs.Find "sGUID=EnID , 0, adSearchForward, adBookmarkFirst", ob der
Datenatz bereits existiert.
Auch hier befürchte ich Performance-Verluste.
Das ganze làuft per UpdateBatch!




Variante 4:






Eine Dummy-Tabelle erzeugen. Dort erst mal ALLES reinimportieren.
Anschließend den Inhalt per SQL direkt in die Zieltabelle rüberschieben.
Hier sehe ich aber wie in Variante 1 das Problem, dass oftmals unnötig der
ganze Datensatz erst mal zur DB geschaufelt wird...




Variante 5:






Gibt es die???


VG
Andy
 

Lesen sie die antworten

#1 Andy Dorwald
23/10/2008 - 00:40 | Warnen spam
Niemand, der einen Tipp hat?

*snief*

"Andy Dorwald" schrieb:
Hallo NG.

ich muss massig Daten in meine DB (übrigens: einmal ist es eine Jet und
einmal ist es ein SQL-Server) mit teils existierenden Eintràgen
importieren.

Wie mache ich das, um die beste Performance zu erhalten?

Variante 1:






Einfach stàndig den neuen Datensatz per ADDNew reinloppen und Index-Fehler
(wegen doppelter Eintràge) ignorieren/überspringen
Hier sehe ich aber das Problem, dass oftmals unnötig der ganze Datensatz
erst mal zur DB geschaufelt wird, obgleich dann oftmals
erkannt wird, dass der Datensatz bereits existiert. Und da es teils
größere Dateninhalte sind, halte ich es nicht unbedingt für den richtigen
Weg.
Das ganze làuft per UpdateBatch! Geht das denn überhaupt, wenn
Index-Verletzungen dabei sind - bzw. bricht UpdateBatch ab, sobald ein
Datensatz bereits existiert?

Variante 2:






Vor jedem Einfügen, brav überprüfen, ob der Eintrag bereits existiert
(jeder Eintrag ha eine eindeutige GUID).
Diesen Weg gehe ich derzeit, habe aber die Befürchtung, dass es recht
inperfomant ist, da ich für jeden Satz erst mal ein SELECT mache
Das ganze làuft per UpdateBatch!

Variante 3:






Ich öffne die Tabelle, in der die Daten rein sollen mit einem Recordset
und prüfe vor jedem AddNew
per rs.Find "sGUID=EnID , 0, adSearchForward, adBookmarkFirst", ob der
Datenatz bereits existiert.
Auch hier befürchte ich Performance-Verluste.
Das ganze làuft per UpdateBatch!

Variante 4:






Eine Dummy-Tabelle erzeugen. Dort erst mal ALLES reinimportieren.
Anschließend den Inhalt per SQL direkt in die Zieltabelle rüberschieben.
Hier sehe ich aber wie in Variante 1 das Problem, dass oftmals unnötig der
ganze Datensatz erst mal zur DB geschaufelt wird...

Variante 5:






Gibt es die???


VG
Andy


Ähnliche fragen