我正在开发一个具有将表格数据导出到指定数据库表的功能的应用程序。该应用程序使用INSERT
语句将其数据导出到目标数据库。
插入是通过一个批处理INSERT
语句完成的,每个 SQL 语句有 100 行INSERT
(现在我不能使用BULK INSERT
或bcp
)。
我注意到,当源数据中的列数超过某个数字(该数字不是固定的,取决于值的大小、每个中的行数INSERT
等)时,导出时间会不成比例地增加。
例如,导出 50 000 行(500 条INSERT
语句,每条语句 100 行)的随机字符串,每个字符串有 100 个字符,每个INSERT
需要100 行:
3 秒,5 列 6 秒,10 列 56 秒,15 列 77 秒,20 列
请注意 10 列和 15 列之间的导出时间差异。我原以为 15 列的导出时间为 9-10 秒,但实际上要长 5 倍。在测试其他数据集的导出时,我发现了类似的性能下降。
为了确保问题不在我这边,我INSERT
通过sqlcmd.exe
. 我得到了类似的结果。
问题:如何让 SQL Server 像处理小列一样快速处理大量列?或者至少将性能下降的点“移动”到更多的列?
额外细节:
INSERT
查询是在本地 SQL Server Express 2014(64 位)版本 12.0.5000.0 上执行的;