Umfangreicher Datenimport



Hallo NG

Ausgangslage:
Aus einem CSV Textfile muss mein Access Client eine umfangreiche Textdatei
welche im CSV Format vorliegt in eine SQL Server Tabelle importieren.
Client Microsoft Access 2002 Zugriff auf SQL Server 2000 oder SQL Server
2005 (je nach Kunde)
In Access sind die Tabellen eingebunden via ODBC Treiber welcher aus dem
MDAC automatisch vorhanden ist.

In der Textdatei sind 40 Spalten und beim grössten Kunden über 2mio Zeilen
vorhanden.
Das CSV File ist etwas grösser als 1GB, der Import mit einer auf einer
Anfügeabfrage basierenden Query dauert ca 3h

Da in der Zieltabelle 8 Indices vorhanden sind frage ich mich, ob es eine
andere Möglichkeit gibt die Daten schneller zu importieren.

In der CSV hat es 8 Spalten welche eine Adresse repräsentieren welche ich
Normalisieren möchte. Dazu habe ich eine Tabelle angelegt mit den 8 Spalten
und per Anfügeabfrage füge ich aus den 2Mio Datensätzen per Group BY die
daraus resultierenden 570 verschiedenen Adressen zuerst ein. Dauert nur 3min
ist also OK.

Beim Hauptimport muss ich natürlich über die 8 Felder Joinen um die ID der
Adresse zu lesen welche ich als Foreign Key in der grossen Tabelle
speichere. Damit der Join nicht über 8 Felder geht (einige sind auch leer)
habe ich in der Adressentabelle ein Feld erstellt adrLink welches
Adr1+'@'+Adr2+'@' etc enthält, dann habe ich in der Anfügeabfrage die
Tabelle per Where csvfile.Adr1+'@'+Adr2+'@' = tblAdresse.adrLink verbunden.

Meine Frage nun:
Wie könnte ich den Import beschleunigen ev zuerst das CSV in eine temporäre
Tabelle laden dann im SQL Server in die richtige Tabelle übertragen?
Würde das jedoch die DB nicht um 1GB zusätzlich vergrössern?
Kann man irgendwie während dem Import die Indices auf der Zieltabelle
ausschalten damit der Import schneller geht und am Schluss ein Reindex
machen? (Die Daten werden später in der Zeiltabelle nie mehr geändert sind
rein für Auswertungen drin, Index nur für Such und Sortiergeschwindigkeit.

Für Anregungen wäre ich dankbar.

Freundliche Grüsse
Markus Wenger



.