[英]Mass/Bulk SQL server updates
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个整数)
通过减少很多需要,我减少了对数据库的调用。 但是我发现这不是过程,而是节省时间的:S
[更新记录中的所有值]与[删除当前数据并插入新内容]的性能之间有区别吗?
如何改善将其保存到数据库中? 喜欢10分钟而不是160m吗?
实体框架只是不太适合批量更新。
我处于同样的情况,最终重写了我的批量更新逻辑,以将ADO.Net与存储过程一起使用。 对于我的特定用例,性能提升约为10倍。
根据您的实际情况,另一个选项可能是SqlBulkCopy 。
您可以使用一些技巧,例如每100个操作左右提交一次。
但是,我一直不得不退而求其次地编写针对ORM进行的数据库操作过慢的存储过程。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.