【发布时间】:2021-05-05 22:27:11
【问题描述】:
使用 pyodbc,我编写了一个 Python 程序来从 Oracle 中提取数据并加载到 SQL Server 中。从 Oracle 中提取是即时的,但是有些表需要很长时间才能加载,尤其是具有许多列(超过 100 多列)的表,其中一些列的大小为 VARCHAR(4000)(我正在运行 pyodbc 的 executemany插入)。
设置 fast_executemany = True 似乎会使 INSERT 更慢。关闭时,加载 40k 行的表大约需要 3 分钟;开启后,加载相同数量的行大约需要 15 分钟。
不确定这是否意味着什么,但我确实在每次尝试期间都打开了 SQL Profiler,我发现:当它关闭时,后端正在为每个插入执行一堆“sp_prepexec”和“sp_unprepare” ;当它打开时,后端只是做了一次“sp_prepare”,然后是一堆“sp_execute”。
知道为什么 fast_executemany 没有加快 INSERT 速度,而且实际上更长吗?
【问题讨论】:
-
您最好配置链接服务器或通过
bcp等进行批量插入
标签: python sql-server pyodbc