Heim  >  Artikel  >  Backend-Entwicklung  >  Wie optimiere ich die Masseneinfügungsgeschwindigkeit in MS SQL Server mithilfe von Pyodbc?

Wie optimiere ich die Masseneinfügungsgeschwindigkeit in MS SQL Server mithilfe von Pyodbc?

Barbara Streisand
Barbara StreisandOriginal
2024-11-02 09:12:29965Durchsuche

How to Optimize Bulk Insert Speed to MS SQL Server Using Pyodbc?

Beschleunigung der Masseneinfügung in MS SQL Server mit Pyodbc

In diesem Code zielt der Autor darauf ab, das Einfügen von über 1,3 Millionen Zeilen in eine MS SQL Server-Datenbank zu optimieren . Derzeit dauert der Vorgang etwa 40 Minuten, um 300.000 Zeilen einzufügen. Basierend auf dem bereitgestellten Code werden die folgenden Ansätze empfohlen, um die Einfügegeschwindigkeit zu verbessern:

Verwendung des T-SQL-Befehls „Masseneinfügung“

Der T-SQL-Befehl BULK INSERT wurde speziell für effiziente Massendaten entwickelt Laden. Allerdings muss sich die Quelldatei auf demselben Computer wie die SQL Server-Instanz oder an einem Netzwerkspeicherort befinden, auf den über SMB/CIFS zugegriffen werden kann.

Nutzung der fast_executemany-Funktion von Pyodbc

Pyodbc 4.0.19 hat die Funktion fast_executemany in seiner Cursor-Klasse eingeführt. Wenn diese Funktion aktiviert ist, optimiert sie die Ausführung von Executemany-Abfragen, bei denen mehrere Datenzeilen eingefügt werden.

Der folgende Code zeigt, wie fast_executemany verwendet wird:

<code class="python">import pyodbc
import time

conn_str = 'connection string'

cnxn = pyodbc.connect(conn_str, autocommit=True)
crsr = cnxn.cursor()
crsr.execute("TRUNCATE TABLE fast_executemany_test")

sql = "INSERT INTO fast_executemany_test (txtcol) VALUES (?)"
params = [(f'txt{i:06d}',) for i in range(1000)]
t0 = time.perf_counter()
crsr.executemany(sql, params)
print(f'{time.perf_counter() - t0:.1f} seconds')

crsr.fast_executemany = True
t0 = time.perf_counter()
crsr.executemany(sql, params)
print(f'{time.perf_counter() - t0:.1f} seconds')</code>

Im obigen Code wird aktiviert fast_executemany reduziert die Ausführungszeit erheblich.

Iteration über Zeilen optimieren

Anstatt die Zeilen einzeln zu iterieren, sollten Sie erwägen, eine Liste oder ein NumPy-Array zum Speichern der Daten zu verwenden und dann die gesamte Sammlung einzufügen in einem einzigen Executemany-Aufruf. Dieser Ansatz eliminiert den Overhead durch wiederholte Cursorausführung.

Durch die Implementierung dieser Optimierungen ist es möglich, die Leistung von Masseneinfügungsvorgängen in MS SQL Server mithilfe von pyodbc drastisch zu verbessern.

Das obige ist der detaillierte Inhalt vonWie optimiere ich die Masseneinfügungsgeschwindigkeit in MS SQL Server mithilfe von Pyodbc?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn