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...
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
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.
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
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.
Sorry, hab mich falsch ausgedrückt.
Ich meinte nur Abfragen von der DB mit "SELECT...".
Die würde ich noch schneller haben wollen...
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.
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.