繁体   English   中英

批量/批量SQL Server更新

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM