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

Tom*_*len 1 c# linq sql-server performance

我HashHash在表格中插入了一个新列.然后我需要编写一个小函数来设置HashHashto 的值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();
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

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

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

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

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

Did*_*hat 5

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

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

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