c# - LINQ 更新大量记录 (>2m) 最快的方法

标签 c# asp.net sql linq

我有这个循环:

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/

相关文章:

c# - JavaScript 正则表达式构造

asp.net - 美化 ASP.NET 标记

mysql - 在结果集中没有日期间隔的日期范围内按日期聚合数据

php - 选择用户参与的所有即将发生的事件

asp.net - 隐藏 gridview 但显示分页/页面链接?

c# - 如何使用 C# 从 ASP.Net 中的数据库中获取最新记录?

javascript - 在 Web Api Controller 中将 JSON 反序列化为字典

C# 确定 DateTime 和 DateTime 之间的区别? (可为空)

c# - SQL CPU 高 - SqlConnection 未关闭 - 相关?

jquery - jQuery ajax GET 请求可以传递的数据限制是多少