我们有一个带有自链接的表,需要删除一些行。我在删除行之前删除了链接,但它非常非常慢。由于需要删除数千行,因此我需要一种更快的方法。
我尝试将提交更改移出循环,但它并不快。我已经验证了检索要删除的行的查询不是问题。
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();
}
}
我最后找到了它,runstopid 需要一个索引,否则它会为每个父链接删除进行表扫描。