我们有一个带有自我链接的表,需要删除一些行。我先删除链接,然后再删除行,但这非常慢。由于需要删除数千行,因此我需要一种更快的方法。
我尝试过将SubmitChanges移到循环外,但这并不快。我已经验证查询检索要删除的行不是问题。
public void ClearOldRunStops()
{
List<RunStop> runStops = db.RunStops.Where(a => a.shiftstarttime < DateFunctions.UtcNow().AddDays(-15) && a.status == RunStopStatus.Deleted.ToString()).ToList();
for (int counter = 0; counter < runStops.Count; counter++)
{
//remove any RunStop self-links before row deletion
for (int counter2 = 0; counter2 < runStops[counter].RunStops.Count; counter2++)
runStops[counter].RunStops[counter2].runstopid = null;
db.RunStops.DeleteOnSubmit(runStops[counter]);
db.SubmitChanges();
}
}
答案 0 :(得分:0)
最后我找到了它,在runstopid上需要一个索引,否则它会为每个父链接删除执行表扫描。