我有这个循环:
using(var db = new MainContext())
{
var q = db.tblInternalURLs;
foreach (var rec in q)
{
db.ExecuteCommand("UPDATE tblInternalURLS SET hash = '" + LoginAPI.GetSha1(rec.URL) + "' WHERE ID = " + rec.ID);
}
}
将更新查询转换为 db.ExecuteCommand
大大提高了速度,但是我想知道是否有更快的方法来执行这些查询,因为它仍然需要很长时间才能超过 2,000,000 条记录。我相信很多开销都在初始 LINQ 查询中。这是正确的吗?
最佳答案
好吧,由于 SQL Server 支持散列,您可以通过编写 SQL 查询一次性完成整个表来避免将任何数据带到客户端:
update
tblInternalURLS
SET
hash = HASHBYTES('SHA1',CONVERT(nvarchar(4000), URL))
如果散列存储为字符串,sys.fn_varbintohexsubstring
可能会很方便。
关于c# - LINQ 更新大量记录 (>2m) 最快的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16922485/