SQL Server - 插入大量行?

时间:2012-06-28 13:40:45

标签: sql-server performance sql-server-2005

我在这里已经阅读了很多关于这个主题的答案,但每个人都建议 BCP ||来自.net的 SqlBulkCopy

我有一个查询,可以从不同的表中插入targetTable 5 selects union

我正在选择的表上有正确的索引。 targetTable上只有1个聚簇身份索引。然而,这需要很长时间(约25分钟)。我说的是5M行(x 20列)。

当我查看 sp_who2 时,大部分时间都是suspended ......

我想使用bulk副本但不是来自.net(数据库已经提取数据 - 因此我不需要转到C#)。

问题

  • 如何在select命令中使用批量插入(无bcp)?
  • 另外,为什么大部分时间都暂停?如何为查询提供更高的优先级

谢谢。

P.S。由于安全限制,我无法在此使用bcp ...我无权运行此操作。

1 个答案:

答案 0 :(得分:0)

你是对的:这比平常花费的时间更长。你每秒获得3k行。你应该很容易达到每秒10k或20k。在每个CPU核心每秒200k的最佳情况下

我怀疑你是在整个桌子上插入,而不仅仅是在最后。在这种情况下,每秒3k行并不罕见。

在任何情况下,批量复制都无法帮助您。它的插入速度不会超过仅限服务器的插入语句。

但是,您可以使用多个线程进行插入。将行源划分为N个不同的范围,并从单独的连接同时插入每个范围。如果您受CPU限制,这将有所帮助。如果你是IO界限,它就不会。