Я согласен с людьми, которые хотят, чтобы вы просматривали меньший набор записей, это будет быстрее, чем пытаться выполнить всю операцию за один шаг. Вы можете испытать количество записей, которые вы должны включить в цикл. Около 2000 в то время, кажется, самое приятное место в большинстве таблиц, где я делаю большие разряды, хотя некоторым нужно меньше, например, 500. Зависит от количества внешних ключей, размера записи, триггеров и т. Д., Так что это действительно займет некоторые эксперименты, чтобы найти то, что вам нужно. Это также зависит от того, насколько интенсивно использование стола. Таблица с большим доступом будет нуждаться в каждой итерации цикла для более короткого времени. Если вы можете работать в нерабочее время или лучше всего в однопользовательском режиме, то вы можете удалить больше записей за один цикл.
Если вы не думаете, что делаете это за одну ночь в нерабочее время, возможно, лучше спроектировать цикл со счетчиком и выполнять только определенное количество итераций каждую ночь, пока это не будет сделано.
Кроме того, если вы используете неявную, а не явную транзакцию, вы можете в любой момент завершить запрос цикла, а уже удаленные записи останутся, кроме тех, которые находятся в текущем цикле цикла. Гораздо быстрее, чем пытаться откатить полмиллиона записей, потому что вы остановили систему.
Обычно рекомендуется создать резервную копию базы данных непосредственно перед выполнением операции такого рода.