ホームページ  >  記事  >  バックエンド開発  >  Pyodbc を使用して MS SQL Server への一括挿入速度を最適化する方法

Pyodbc を使用して MS SQL Server への一括挿入速度を最適化する方法

Barbara Streisand
Barbara Streisandオリジナル
2024-11-02 09:12:29965ブラウズ

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

Pyodbc を使用した MS SQL Server への一括挿入の高速化

このコードでは、作成者は MS SQL Server データベースへの 130 万行以上の挿入を最適化することを目的としています。 。現在、300,000 行を挿入するプロセスには約 40 分かかります。提供されているコードに基づいて、挿入速度を向上させるには次のアプローチが推奨されます。

一括挿入 T-SQL コマンドの使用

T-SQL BULK INSERT コマンドは、効率的なバルク データ用に特別に設計されています。ロード中。ただし、ソース ファイルは SQL Server インスタンスと同じマシン上、または SMB/CIFS 経由でアクセスできるネットワーク上の場所に配置する必要があります。

Pyodbc の fast_executemany 機能の活用

Pyodbc 4.0.19は、Cursor クラスに fast_executemany 機能を導入しました。この機能を有効にすると、複数行のデータの挿入を伴うexecutemanyクエリの実行が最適化されます。

次のコードは、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>

上記のコードでは、 fast_executemany は実行時間を大幅に短縮します。

行の反復の最適化

行を 1 つずつ反復する代わりに、リストまたは NumPy 配列を使用してデータを保存し、コレクション全体を挿入することを検討してください。 1 回の実行で多くの呼び出しを実行できます。このアプローチにより、繰り返しカーソルを実行するオーバーヘッドが排除されます。

これらの最適化を実装することにより、pyodbc を使用した MS SQL Server での一括挿入操作のパフォーマンスを大幅に向上させることができます。

以上がPyodbc を使用して MS SQL Server への一括挿入速度を最適化する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。