我在这里已经阅读了很多关于这个主题的答案,但每个人都建议 BCP ||来自.net的 SqlBulkCopy 类
我有一个查询,可以从不同的表中插入targetTable
5 selects
的 union 。
我正在选择的表上有正确的索引。 targetTable
上只有1个聚簇身份索引。然而,这需要很长时间(约25分钟)。我说的是5M行(x 20列)。
当我查看 sp_who2 时,大部分时间都是suspended
......
我想使用bulk
副本但不是来自.net(数据库已经提取数据 - 因此我不需要转到C#)。
问题
谢谢。
P.S。由于安全限制,我无法在此使用bcp
...我无权运行此操作。
答案 0 :(得分:0)
你是对的:这比平常花费的时间更长。你每秒获得3k行。你应该很容易达到每秒10k或20k。在每个CPU核心每秒200k的最佳情况下
我怀疑你是在整个桌子上插入,而不仅仅是在最后。在这种情况下,每秒3k行并不罕见。
在任何情况下,批量复制都无法帮助您。它的插入速度不会超过仅限服务器的插入语句。
但是,您可以使用多个线程进行插入。将行源划分为N个不同的范围,并从单独的连接同时插入每个范围。如果您受CPU限制,这将有所帮助。如果你是IO界限,它就不会。