更新数据库中许多行的最快方法是什么?

时间:2016-11-25 15:01:44

标签: c# sql sql-server

基本思路是每一行都有一个唯一的项目ID,我用它来决定更新哪一行,并用数量更新它。我将库存从公司的api导入到我自己的数据库中,大约有8万件物品。它们具有单独的api端点,用于项目详细信息与项目数量,因此我需要先从第一个端点获取所有库存,然后调用第二个端点并更新所有项目'数量。

我的初始解决方案是循环通过我得到的结果并为每个查询更新一行。这需要大约一个半小时到一个半小时来更新所有80k项目。这只是更新这么多项目需要多长时间,还是我可以做的任何sql魔法?

由于

2 个答案:

答案 0 :(得分:1)

我要做的第一件事就是将更新数据存储在一个单独的表中。然后运行查询,例如:

update t
    set . . .
    from t join
         results r
         on t.?? = r.??;

假设用于join的列被编入索引,那么这应该比一个半小时快。

答案 1 :(得分:0)

您可以先使用Parallel.ForEach构建更新脚本,然后通过SqlCommand执行脚本。更新脚本包含多个更新T-SQL语句。

或者使用最好的SQL客户端程序集库。这是SqlBulkCopy功能。您可以参考这篇文章:http://www.developerfusion.com/article/122498/using-sqlbulkcopy-for-high-performance-inserts/

首先使用SqlBulkCopy将大数据插入临时表,然后编写存储过程以将数据从临时表更新到目标表。