批量/批量SQL服务器更新

本文关键字:批量 更新 服务器 SQL | 更新日期: 2023-09-27 18:07:17

代码

foreach (var item in _context.Duiven.
                .Include(p => p.Duivenmelker.VoedselInstelling)
                .Include(p => p.VoedselHistoriek)
                .Include(p => p.Duivenmelker.Personeel)
                .Include("Ziektes.DuifZiekte")
                .ToList() // 25.000)
            {
                item.FoodHistory();
                item.HealthSimulation();
                item.DiseaseSimulation(diseaseTypes);
                item.CureSimulation(_context);
                item.DeathSimulation();
                item.Feed();
}
_context.SaveChanges()

问题

上面的代码通过aprox循环。25000件商品。它会更新这些对象上的各种内容(这个过程大约需要10分钟(问题在于将所有这些更改保存到数据库,这几乎需要2个小时。

它可能一个接一个地更新(sql(每个更改?(这是sql azure(该过程还包括删除25000条记录&插入25000个新的(4 int(

我已经减少了对数据库的调用,包括了很多需要的内容。但我发现,花这么长时间的不是过程,而是节省:s

问题

[更新记录中的所有值]和[删除当前内容并插入新内容]?

如何改进将其保存到数据库的操作?比如10分钟而不是160米?

批量/批量SQL服务器更新

Entity Framework不太适合批量更新。

我也处于同样的情况,最终重写了我的批量更新逻辑,用存储过程使用ADO.Net。对于我的特定用例,性能提升大约是10倍。

另一个选项可能是SqlBulkCopy,具体取决于您的具体情况。

你可以使用一些技巧,比如每100次左右只提交一次操作。

但是,我总是不得不回退到为数据库操作编写一个存储过程,这些操作从ORM预处理得太慢了。