一括挿入操作により、大規模なデータセットを Microsoft SQL Server に挿入するパフォーマンスが大幅に向上します。この記事では、質問で提供されたコードが直面する特定の課題に対処しながら、そのような挿入を最適化するための代替アプローチを検討します。
高速実行 (Pyodbc) 4.0.19): Pyodbc の最近のバージョン (4.0.19 ) は、複数行の挿入の実行を迅速化するように設計された Cursor#fast_executemany 機能を提供します。 crsr.fast_executemany を True に設定すると、デフォルトのexecutemany メソッドと比較してパフォーマンスが大幅に向上する可能性があります。
<code class="python"># Connect to the database and create a cursor with fast_executemany enabled cnxn = pyodbc.connect(conn_str, autocommit=True) crsr = cnxn.cursor() crsr.fast_executemany = True # Execute the bulk insert operation with parameters sql = "INSERT INTO table_name (column1, column2) VALUES (?, ?)" params = [(data1, data2) for (record_id, data1, data2) in data] crsr.executemany(sql, params)</code>
Pandas DataFrame を使用した反復: またはの場合、Pandas を使用して CSV データを DataFrame に読み取り、その最適化された to_sql() メソッドを利用できます。このアプローチはデータ挿入を効率化し、チャンキングや型変換などのさまざまな最適化をサポートします。
<code class="python">import pandas as pd # Read CSV data into a DataFrame df = pd.read_csv(csv_file) # Establish a database connection engine = sqlalchemy.create_engine(conn_str) # Insert DataFrame into the database using `to_sql()` df.to_sql('table_name', con=engine, if_exists='append', index=False)</code>
Bulk Copy Interface (BCP): Bulk Copy Interface ( BCP) は、ファイルとデータベース テーブル間の高速データ転送を可能にするネイティブ SQL Server ユーティリティです。 BCP には、標準 SQL INSERT ステートメントに比べてパフォーマンス上の利点がいくつかあります。
bcp {table_name} in {csv_file} -S {server} -d {database} -E
特定のシナリオに最適なアプローチは、データ サイズ、サーバーなどの要因によって異なります。構成と利用可能なリソース。一般に、fast_executemany はカーソルを介した反復よりもパフォーマンスが大幅に向上しますが、BCP は多くの場合、一括挿入シナリオの両方で優れています。
以上がPyodbc を使用して MS SQL Server への一括挿入を高速化するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。