为什么这个函数在第二轮中运行得快几个数量级

本文关键字:运行 数量级 几个 函数 为什么 二轮 | 更新日期: 2023-09-27 17:57:41

我在表中插入了一个新列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查询。

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

为什么这个函数在第二轮中运行得快几个数量级

Submit更改只执行实际更改。将值12更新为新的值12并不是一个更改。

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

是的,你的怀疑是对的。