批量/批量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米?
Entity Framework不太适合批量更新。
我也处于同样的情况,最终重写了我的批量更新逻辑,用存储过程使用ADO.Net。对于我的特定用例,性能提升大约是10倍。
另一个选项可能是SqlBulkCopy,具体取决于您的具体情况。
你可以使用一些技巧,比如每100次左右只提交一次操作。
但是,我总是不得不回退到为数据库操作编写一个存储过程,这些操作从ORM预处理得太慢了。