Ms Access Insert Performance erhöhen
Ich verwende MS Access 2010, aufgeteilt in Frontend / Backend. auf einem Netzwerklaufwerk (WAN) mit 16+ Tabellen mit einer Tabelle von Benutzer (1,3 Millionen), das hauptsächlich für Benutzerinformationen verwendet wird und keine schweren und wenige andere Tabellen einfügt, die @ erhaltupto 2000+ fügt täglich @ e.
Ich konnte die meisten Lese- / Auswahlabfragen optimieren. Obwohl 1 Teil meines Codes wie folgt aussieht. Dies kann für bis zu 2000 Iterationen täglich verwendet werden.
Do Until rec.EOF
Dim vSomeId As Integer
vSomeId = rec!SomeId
'StrSQL = StrSQL & "INSERT INTO TransportationDetails ( TransportationId, SomeId)" & _
'"VALUES(" & vTransportationId & ", " & vSomeId & ");"
StrSQL = "INSERT INTO TransportationDetails ( TransportationId, SomeId)" & _
"VALUES(" & vTransportationId & ", " & vSomeId & ");"
DoCmd.SetWarnings False
DoCmd.RunSQL (StrSQL)
DoCmd.SetWarnings True
rec.Edit
rec!SomeBoolean = rec!SomeOtherBoolean
rec.Update
rec.MoveNext
Loop
ein Ziel hier ist es, Reduzieren Sie die Anzahl der Anrufe bei der Datenbank, um alle Werte einzufügen. undMS ACCESS unterstützt NICHT, dass eine Anweisung mehr als eine Abfrage enthält, wie ich im kommentierten Teil des Codes versucht habe. Ich denke auch, dass die Methode zum Aktualisieren des Recordset sehr zeitaufwendig ist, und wenn jemand eine bessere Möglichkeit zum Aktualisieren des Recordset vorschlagen kann.
Ist dort kann ich irgendwie Access betrügen, um & Update in @ einzufügless trifft auf db über SQL-Abfragen oder eine andere Zugriffsfunktion. Oder optimieren Sie es trotzdem. Es kann bis zu 30 Minuten dauern. Es ist angemessen, den Wert auf mindestens 2 bis 5 Minuten zu verringern.
P.S. Ich kann nicht auf SQL Server wechseln, es istNUR NICHT MÖGLICH. Ich bin mir bewusst, dass dies auf eine optimalere Art und Weise über den SQL-Server erfolgen kann und dass Access nicht für WAN verwendet werden sollte, aber ich habe diese Option nicht.
Lösung: Ich habe mich für die Lösung von Andre und Jorge entschieden. Die Zeit wurde um das 17-fache verringert. Obwohl Alberts Antwort auch richtig ist, lag mein Hauptproblem bei den SQL-Anweisungen in einer Schleife. Das Ändern der Änderungen in der Datensatzgruppe in SQL hatte keinen großen Einfluss auf den Zeitfaktor.