加快SQL Server 2008中185k行的更新速度?

我有一个大约185k行的二进制文件。 C#在几秒钟内解析文件。 用这些数据更新MSSQL表的最佳方法是什么?

我尝试过的:

  1. 最简单的方法 – 读取二进制行,解析,更新表。 整个过程大约需要2天才能更新所有数据。
  2. 合并200个更新查询并立即将它们发送到MSSQL。 在这种情况下,更新需要8到10小时。
  3. 将500多个查询合并为单个查询。 工作得更快,但不时会丢弃超时exception,因此有些更新不会通过。

有关如何加快更新过程的任何建议?

使用SqlBulkCopy (到临时表),然后使用MERGE

批量复制方法可以使用.NET客户端的“推送”有效地传输数据。 使用BULK INSERT需要从服务器“拉”(以及所需的本地文件访问)。

然后, MERGE命令(在SQL Server 2008+中)可用于根据所需规则将数据从临时表插入/更新/ upsert到目标表。 由于此时数据完全在数据库中,因此该操作将尽可能快。 与许多单独的命令相比,使用MERGE 可以带来性能优势 ,即使是同一事务中的命令也是如此。

也可以看看:

  • SQLBulkCopy的任何方式“插入或更新,如果存在”?
  • SQL Server 2008 INSERT优化

不确定你真的想通过C#来做这件事:可能想要使用BULK INSERT并给它一个文件,你的数据格式正确。