为什么这个功能第二次运行的速度要快几个数量级?

时间:2014-04-10 13:16:35

标签: c# sql-server performance linq

我在表格中插入了一个新列HashHash。然后我需要编写一个小函数,将HashHash的值设置为Sha1(Row.Hash)

public static void UpdateAllHashHashes()
{
    using (var db = new MainContext())
    {
        var q = db.v2Hashes;
        foreach (var rec in q)
        {
            rec.HashHash = GetSha1(rec.Hash);
            db.SubmitChanges();
        }
    }
}

该表有数千条记录。我第一次跑它,花了好几分钟。它在结尾附近引发了一个错误,导致它没有完成,并留下了大约20个未经处理的记录,这是我期待的,所以我再次运行该函数以获得最后工作正常的记录。

  • 第一次,花了~2分钟
  • 第二次约需2秒

第二次传递的原因是如此之快,因为db.SubmitChanges实际上并没有执行SQL,因为值没有改变?我仍然希望它运行UPDATE SQL查询。

或者,这是某个数据库引擎优化吗?

1 个答案:

答案 0 :(得分:5)

提交更改仅执行实际更改的更改。将值12更新为新值12不是一个变化。

http://msdn.microsoft.com/en-us/library/bb292162(v=vs.110).aspx

所以是的,你的怀疑是正确的。