Laden...

Verbindung mit Access

Erstellt von pmSyS vor 18 Jahren Letzter Beitrag vor 17 Jahren 2.349 Views
P
pmSyS Themenstarter:in
65 Beiträge seit 2006
vor 18 Jahren
Verbindung mit Access

Mahlzeit!

Ich benutze für meine Anwendung eine temporäre DB, in dem Fall eine Access-Datei.
Als Verbindung habe ich den OleDBAdapter.
Das Speichern von Daten aus einem DataTable ( z.b. 3000 Einträge) dauert schon mal eine Minute. Im Extremfall wenn es über 500000 Einträge gibt, dauert es schon mal >45 min.

Meine Frage: Ist das die Regel oder kann man da irgendwo die Verbindung tunen?
Oder warum dauert der Insert so lange? Der SELECT geht um ein viiiielfaches schneller...
Was könnte man noch als temporäre Dateauslagerung verwenden?

Ich lagere die Daten aus, um zum einen den Hauptspeicher zu entlasten und um eine spätere Abfrage mit SQL zu erleichtern.

Danke.

Gruß
pmSyS

Habe gerade potenzielle Alternativen zu Access gefunden.
Mal sehen, ob es schneller ist als dieser...

R
265 Beiträge seit 2005
vor 18 Jahren

Und wie wäre es, mit XML Dateien als Temp Speicher.
Dann lädst du dir die Daten in einem Dataset und mit myDataset.WirteXML(...); schreibst du die Daten wieder weg.
Bis Dann
Markus

P
pmSyS Themenstarter:in
65 Beiträge seit 2006
vor 18 Jahren

Da hab ich auch schon daran gedacht, aber dann kann ich keine SQL Abfragen machen, oder geht es auch bei Datasets??

Info: Laut meiner Messung ist die Firebird-DB nicht wesentlich schneller als Access.
Jetzt versuch ich es mal mit MSDE.

P
pmSyS Themenstarter:in
65 Beiträge seit 2006
vor 17 Jahren

Ich muss noch einmal ansetzen und korregieren:

Firebird ist mit einer Transaktion wesentlich schneller als Access.
Hab es damals wohl nicht mit einer Transaktion gemacht...

Ich muss aber anmerken, dass eine Abfrage, je nach Anzahl Daten, doch schon ein paar Sekunden dauert.
Da nützt aber eine Transaktion nichts, zumindest habe ich keine Steigerung festgestellt.

Kann man die "Abfrage"-Geschwindigkeit vielleicht noch ein wenig tunen? Weiss da jemand etwas?

Gruß
pmSyS

S
8.746 Beiträge seit 2005
vor 17 Jahren

Erstelle vor DataAdapter.Update() eine Transaktion (Insert-COmmand zuweisen!) und Committe sie danach. Das dürfte schon richtig was bringen. Unter dem SQLClient würden dir noch die SqlBulkCopy-Klasse zur Verfügung stehen. Mit Access natürlich nicht möglich.

P
pmSyS Themenstarter:in
65 Beiträge seit 2006
vor 17 Jahren

Sorry, hab mich falsch ausgedrückt.
Ich meinte nur Abfragen von der DB mit "SELECT...".
Die würde ich noch schneller haben wollen...

F
10.010 Beiträge seit 2004
vor 17 Jahren

Das geht nur über "richtig" erstellte Indizes und/oder StoredProcs.

Ohne vernünftigen Index, muss immer die gesammte DB durchgelesen werden,
und das dauert dann halt, egal welche DB Du benutzt.

Für fast jedes RDBMS gibt es zig verschiedene Optimierungsmöglichkeiten.

P
pmSyS Themenstarter:in
65 Beiträge seit 2006
vor 17 Jahren

Hmm,

ich hab da schon ein wenig rumgegoogelt, aber nichts passendes zu Firebird und Indizes gefunden.

Und ich nehme an, dass jede DB ein wenig anders im Aufbau der Indizes ist.

Kennt jemand eine gute Doku. für Firebird und Indizes?
Auf deren Seite hab ich auch nichts gescheites gefunden.