В моей БД Access (внутри приложения C #) у меня изначально был такой запрос:
DELETE
FROM ModelRule
WHERE RuleID NOT IN (SELECT RuleID FROM Rule)
С правилами 700К это невыносимо медленно.Поэтому я прибег к циклу C #:
foreach ( DataRow row in dtRulesToPurge.Rows ) {
[pseudocode:] "DELETE FROM ModelRule WHERE RuleID = " + row["ID"];
[pseudocode:] Give user feedback/progressbar/counts
}
Кажется, что foreach
быстрее, но в основном (по крайней мере) я могу дать обратную связь пользователям через индикатор выполнения.Этот подход занимает минуты.Коррелированный подзапрос занимает как минимум минут , но я всегда сдавался и убивал его до того, как он действительно закончился - я подозреваю, что это занимает больше времени.
НО у меня в голове немного щекотки, которая говорит:может быть БЫСТРЫЙ способ сделать это удаление с помощью лучшего подзапроса или какого-либо соединения, и т. д., который будет намного лучше, чем любой из моих двух подходов выше.
Хотелось бы услышать ваши мысли.