1

我正在从 c# 代码大批量进行频繁的插入和更新,我需要尽快完成,请帮助我找到加快此过程的所有方法。

  1. StringBuilder使用, 单独的语句构建命令文本;
  2. 不要使用String.Formator StringBuilder.AppendFormat,它比多次StringBuilder.Append调用更慢
  3. 重用SqlCommandSqlConnection
  4. 不要使用SqlParameters(限制批量大小)
  5. 使用insert into table values(..),values(..),values(..)语法(每条语句 1000 行)
  6. 使用尽可能少的索引和约束
  7. 尽可能使用简单的恢复模式
  8. ?

以下是帮助更新上述列表的问题

  1. 每个命令(每次ExecuteNonQuery()调用)的最佳语句数是多少?
  2. 在同一批次中进行插入和更新是好还是分开执行更好?

tcp 正在接收我的数据,因此请不要建议任何涉及从文件或外部表读取数据的批量插入命令。

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

4

3 回答 3

2

使用表值参数。当使用大量行时,它们可以很好地扩展,并且您可以获得接近 BCP 级别的性能。我在博客中介绍了一种从 C# 方面使该过程变得非常简单的方法。您需要了解的所有其他信息都在 MSDN 站点。通过这种方式,您将获得更好的性能,而不是围绕正常的 SQL 批处理进行一些小的调整。

于 2012-10-18T14:16:10.443 回答
1

从 SQLServer2008 开始,TableParameters 是可行的方法。看这篇文章(第四步)

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

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

于 2012-10-18T19:24:07.230 回答
0

使用SqlBulkCopy到临时表中,然后使用MERGESQL 命令合并数据。

于 2012-10-18T19:13:59.783 回答