加快SQL Server 2008中185k行的更新速度?
我有一个大约185k行的二进制文件。 C#
在几秒钟内解析文件。 用这些数据更新MSSQL
表的最佳方法是什么?
我尝试过的:
- 最简单的方法 – 读取二进制行,解析,更新表。 整个过程大约需要2天才能更新所有数据。
- 合并200个更新查询并立即将它们发送到MSSQL。 在这种情况下,更新需要8到10小时。
- 将500多个查询合并为单个查询。 工作得更快,但不时会丢弃超时exception,因此有些更新不会通过。
有关如何加快更新过程的任何建议?
使用SqlBulkCopy
(到临时表),然后使用MERGE
。
批量复制方法可以使用.NET客户端的“推送”有效地传输数据。 使用BULK INSERT
需要从服务器“拉”(以及所需的本地文件访问)。
然后, MERGE
命令(在SQL Server 2008+中)可用于根据所需规则将数据从临时表插入/更新/ upsert到目标表。 由于此时数据完全在数据库中,因此该操作将尽可能快。 与许多单独的命令相比,使用MERGE
还可以带来性能优势 ,即使是同一事务中的命令也是如此。
也可以看看:
- SQLBulkCopy的任何方式“插入或更新,如果存在”?
- SQL Server 2008 INSERT优化
不确定你真的想通过C#来做这件事:可能想要使用BULK INSERT并给它一个文件,你的数据格式正确。