SQL Server的最佳插入/更新批处理

时间:2012-10-18 13:50:39

标签: sql-server performance sql-server-2008 tsql insert

我经常从c#代码批量插入和更新,我需要尽快完成,请帮助我找到加速此过程的所有方法。

  1. 使用StringBuilder构建命令文本,使用;
  2. 分隔语句
  3. 请勿使用String.FormatStringBuilder.AppendFormat,它会比多次StringBuilder.Append来电慢
  4. 重复使用SqlCommandSqlConnection
  5. 请勿使用SqlParameter s(限制批量)
  6. 使用insert into table values(..),values(..),values(..)语法(每个语句1000行)
  7. 使用尽可能少的索引和约束
  8. 尽可能使用简单恢复模式
  9. 以下是帮助更新上面列表的问题

    1. 每个命令的最佳语句数(每ExecuteNonQuery()次调用)是多少?
    2. 在同一批次中进行插入和更新是否合适,或者最好单独执行它们?
    3. 我的数据正由tcp接收,因此请不要建议任何涉及从文件或外部表读取数据的批量插入命令。

      插入/更新语句的速率约为10/3。

3 个答案:

答案 0 :(得分:2)

使用表值参数。当使用大量行时,它们可以很好地扩展,并且您可以获得接近BCP级别的性能。我在博客上写了一篇关于从C#端here开始简化这个过程的方法。您需要知道的其他所有内容都在MSDN网站here上。您可以通过这种方式获得更好的性能,而不是对正常的SQL批次进行一些调整。

答案 1 :(得分:1)

从SQLServer2008开始,TableParameters是最佳选择。见本文(第四步)

http://www.altdevblogaday.com/2012/05/16/sql-server-high-performance-inserts/

我将此与并行插入过程相结合。认为这也有帮助,但必须检查; - )

答案 2 :(得分:0)

SqlBulkCopy用于临时表,然后使用MERGE SQL命令合并数据。