在這段程式碼中,作者的目標是優化向MS SQL Server 資料庫中插入超過130 萬行的操作。目前,插入 300,000 行的過程大約需要 40 分鐘。根據提供的程式碼,建議採用以下方法來提高插入速度:
T-SQL BULK INSERT 指令專為高效率批次資料而設計載入中。但是,它要求來源檔案位於與 SQL Server 實例相同的電腦上,或位於可透過 SMB/CIFS 存取的網路位置。
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中文網其他相關文章!