我正在开发一个系统,它在工作时将用新ID更新数据库中给定数量的行。更新多行的快速方法
目前我有约900万行,并且在选择了一小部分数据(〜10k条目)之后,我想遍历每个这些条目并用一个新的ID更新一列。
我目前做的工作,但速度太慢,无法使用,所以我需要改进它。这里是代码,这最初是一个ForEach循环,但我读了'对于'数组循环更快,所以我试图没有太大的改善。
public string UpdateWithNewWidgetId(List<string> allTheWidgetIds, int newWidgetId)
{
var repoPerson = _repositoryFactory.CreateRepository<Person>();
try
{
var person = repoPerson.GetAll(x => fieldToUpdate.Any(val => x.WidgetId == val)).ToArray;
for (int i = 0; i < person.Length; i++)
{
person[i].WidgetId= newWidgetId;
repoPerson.Update(person[i]);
}
repoPerson.SaveChanges();
}
catch (Exception ex)
{
//log error
}
因此,repoPerson很快返回10K左右的项目列表,但foreach循环需要年龄,然后调用SaveChanges(这只是做了Context.SaveChanges())需要更长的时间。
最初我在foreach中有SaveChanges,并认为这是我的问题,但从循环中删除它并没有改善。
我将要求大运营 – Tuco
存储过程,我会调查使用一个存储过程,在上面的例子中,你会推荐通过做整个事情存储或只是更新? –