首頁  >  文章  >  後端開發  >  如何使用 Pyodbc 優化 MS SQL Server 的批次插入速度?

如何使用 Pyodbc 優化 MS SQL Server 的批次插入速度?

Barbara Streisand
Barbara Streisand原創
2024-11-02 09:12:29969瀏覽

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

使用Pyodbc 加速向MS SQL Server 的批次插入

在這段程式碼中,作者的目標是優化向MS SQL Server 資料庫中插入超過130 萬行的操作。目前,插入 300,000 行的過程大約需要 40 分鐘。根據提供的程式碼,建議採用以下方法來提高插入速度:

利用 Bulk Insert 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 顯著減少了執行時間。

最佳化行迭代

不要逐行迭代,可以考慮使用列表或 NumPy 數組來存儲數據,然後插入整個集合在單個執行許多調用中。這種方法消除了重複遊標執行的開銷。

透過實現這些最佳化,可以使用 pyodbc 大幅增強 MS SQL Server 中批次插入操作的效能。

以上是如何使用 Pyodbc 優化 MS SQL Server 的批次插入速度?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn