基本思路是每一行都有一个唯一的项目ID,我用它来决定更新哪一行,并用数量更新它。我将库存从公司的api导入到我自己的数据库中,大约有8万件物品。它们具有单独的api端点,用于项目详细信息与项目数量,因此我需要先从第一个端点获取所有库存,然后调用第二个端点并更新所有项目'数量。
我的初始解决方案是循环通过我得到的结果并为每个查询更新一行。这需要大约一个半小时到一个半小时来更新所有80k项目。这只是更新这么多项目需要多长时间,还是我可以做的任何sql魔法?
由于
答案 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
将大数据插入临时表,然后编写存储过程以将数据从临时表更新到目标表。