在这段代码中,作者的目标是优化向 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中文网其他相关文章!