Maison  >  Article  >  développement back-end  >  Comment optimiser la vitesse d'insertion en masse sur MS SQL Server à l'aide de Pyodbc ?

Comment optimiser la vitesse d'insertion en masse sur MS SQL Server à l'aide de Pyodbc ?

Barbara Streisand
Barbara Streisandoriginal
2024-11-02 09:12:29969parcourir

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

Accélération de l'insertion en masse dans MS SQL Server à l'aide de Pyodbc

Dans ce code, l'auteur vise à optimiser l'insertion de plus de 1,3 million de lignes dans une base de données MS SQL Server . Actuellement, le processus prend environ 40 minutes pour insérer 300 000 lignes. Sur la base du code fourni, les approches suivantes sont recommandées pour améliorer la vitesse d'insertion :

Utilisation de la commande T-SQL d'insertion en masse

La commande T-SQL BULK INSERT est spécialement conçue pour des données en masse efficaces. chargement. Cependant, cela nécessite que le fichier source soit situé sur la même machine que l'instance SQL Server ou dans un emplacement réseau accessible via SMB/CIFS.

Exploitation de la fonctionnalité fast_executemany de Pyodbc

Pyodbc 4.0.19 a introduit la fonctionnalité fast_executemany dans sa classe Cursor. Lorsqu'elle est activée, cette fonctionnalité optimise l'exécution des requêtesexecutemany, qui impliquent l'insertion de plusieurs lignes de données.

Le code suivant montre comment utiliser fast_executemany :

<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>

Dans le code ci-dessus, l'activation fast_executemany réduit considérablement le temps d'exécution.

Optimisation de l'itération sur les lignes

Au lieu de parcourir les lignes une par une, envisagez d'utiliser une liste ou un tableau NumPy pour stocker les données, puis insérez la collection entière en un seul appel d'exécution. Cette approche élimine la surcharge liée à l'exécution répétée du curseur.

En implémentant ces optimisations, il est possible d'améliorer considérablement les performances des opérations d'insertion en masse dans MS SQL Server à l'aide de pyodbc.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn