Pyodbc を使用して MS SQL Server への一括挿入を高速化するにはどうすればよいですか?

Linda Hamilton
リリース: 2024-11-02 16:21:02
オリジナル
273 人が閲覧しました

How to Speed Up Bulk Inserts into MS SQL Server Using Pyodbc?

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

一括挿入操作により、大規模なデータセットを Microsoft SQL Server に挿入するパフォーマンスが大幅に向上します。この記事では、質問で提供されたコードが直面する特定の課題に対処しながら、そのような挿入を最適化するための代替アプローチを検討します。

代替アプローチ

  1. 高速実行 (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>
    ログイン後にコピー
  2. 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>
    ログイン後にコピー
  3. 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 は多くの場合、一括挿入シナリオの両方で優れています。

追加の考慮事項

  • データ プロファイリング:挿入プロセスの速度を低下させる可能性がある SQL 変換エラーを避けるために、データの形式と型が正しく設定されていることを確認してください。
  • サーバー ハードウェア: SQL Server インスタンスに十分なメモリ、CPU、および
  • ファイルの場所: T-SQL BULK INSERT コマンドの場合、CSV ファイルは同じサーバーまたはアクセス可能なネットワーク共有上にある必要があります。一方、Fast_executemany と Pandas to_sql() は、ファイルの場所に関してより柔軟です。

以上がPyodbc を使用して MS SQL Server への一括挿入を高速化するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート