Rumah >pembangunan bahagian belakang >Tutorial Python >Bagaimana untuk Mempercepatkan Sisipan Pukal ke dalam Pelayan MS SQL Menggunakan Pyodbc?

Bagaimana untuk Mempercepatkan Sisipan Pukal ke dalam Pelayan MS SQL Menggunakan Pyodbc?

Linda Hamilton
Linda Hamiltonasal
2024-11-02 16:21:02280semak imbas

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

Mempercepatkan Sisipan Pukal ke MS SQL Server Menggunakan Pyodbc

Operasi sisipan pukal boleh meningkatkan prestasi memasukkan set data besar ke dalam Microsoft SQL Server dengan ketara. Artikel ini meneroka pendekatan alternatif untuk mengoptimumkan sisipan sedemikian, menangani cabaran khusus yang dihadapi oleh kod yang disediakan dalam soalan.

Pendekatan Alternatif

  1. Melaksanakan Cepat (Pyodbc 4.0.19): Versi terkini Pyodbc (4.0.19 ) menawarkan ciri Cursor#fast_executemany, direka untuk mempercepatkan pelaksanaan sisipan berbilang baris. Dengan menetapkan crsr.fast_executemany kepada True, anda berpotensi memperoleh peningkatan prestasi yang ketara berbanding kaedah executemany lalai.

    <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. Lelaran Menggunakan Pandas DataFrame: Sebagai alternatif , anda boleh menggunakan Pandas untuk membaca data CSV anda ke dalam DataFrame dan memanfaatkan kaedah to_sql() yang dioptimumkan. Pendekatan ini menyelaraskan pemasukan data dan menyokong pelbagai pengoptimuman, seperti penukaran chunking dan jenis.

    <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. Antara Muka Salin Pukal (BCP): Antara Muka Salin Pukal ( BCP) ialah utiliti SQL Server asli yang membolehkan pemindahan data berkelajuan tinggi antara fail dan jadual pangkalan data. BCP menawarkan beberapa kelebihan prestasi berbanding pernyataan SQL INSERT standard.

    bcp {table_name} in {csv_file} -S {server} -d {database} -E

Perbandingan Prestasi

Pendekatan optimum untuk senario khusus anda bergantung pada faktor seperti saiz data, pelayan konfigurasi, dan sumber yang tersedia. Secara amnya, fast_executemany memberikan peningkatan prestasi yang ketara berbanding lelaran melalui kursor, manakala BCP sering mengatasi kedua-dua senario sisipan pukal.

Pertimbangan Tambahan

  • Pemprofilan Data: Pastikan data anda diformat dan ditaip dengan betul untuk mengelakkan ralat penukaran SQL yang boleh melambatkan proses pemasukan.
  • Perkakasan Pelayan: Sahkan bahawa contoh SQL Server anda mempunyai memori, CPU dan CPU yang mencukupi sumber storan untuk mengendalikan operasi sisipan pukal dengan cekap.
  • Lokasi Fail: Untuk perintah T-SQL BULK INSERT, fail CSV mesti terletak pada pelayan yang sama atau bahagian rangkaian yang boleh diakses. Fast_executemany dan Pandas to_sql(), sebaliknya, lebih fleksibel dari segi lokasi fail.

Atas ialah kandungan terperinci Bagaimana untuk Mempercepatkan Sisipan Pukal ke dalam Pelayan MS SQL Menggunakan Pyodbc?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn