我正在開發一個系統,它在工作時將用新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
存儲過程,我會調查使用一個存儲過程,在上面的例子中,你會推薦通過做整個事情存儲或只是更新? –