Медленное удаление родительской ссылки Linq-to-SQL - PullRequest
0 голосов
/ 01 февраля 2019

У нас есть таблица с самостоятельной ссылкой, и некоторые строки необходимо удалить.Я удаляю ссылку перед удалением строк, но она очень и очень медленная.Поскольку необходимо удалить тысячи строк, мне нужен более быстрый способ.

Я пытался переместить 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();
    }
}

1 Ответ

0 голосов
/ 01 февраля 2019

В конце концов я обнаружил, что для runtopid требуется индекс, в противном случае выполняется сканирование таблицы для удаления каждой родительской ссылки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...