Это очень очень широкий вопрос, который в основном сводится к "это зависит".Факторы, которые влияют на это, включают:
Каков ваш уровень параллелизма?Оператор delete устанавливает исключительную блокировку для затронутых строк.В зависимости от механизма базы данных, распределения удаленных данных и т. Д., Которые могут перейти на страницу или всю таблицуМогут ли ваши читатели данных быть заблокированными на время удаления?
Насколько сложен оператор удаления?К скольким другим таблицам вы присоединяетесь или существуют сложные предложения WHERE?Иногда определение удаляемых строк может быть более «дорогим», чем само удаление, поэтому одно большое удаление может быть «более дешевым».
Боитесь ли вы тупиковых ситуаций?По мере уменьшения размера удаляемого тупика «отпечаток ноги» уменьшается.В идеале удаление из одной строки всегда будет успешным.
Вас интересует производительность?Как и в любом операторе SQL, обычно есть постоянный объем служебных данных (соединения, разбор запросов, возврат результатов и т. Д.).С точки зрения одного соединения, удаление 1000 строк будет быстрее, чем удаление 1000 x 1 строка.
Не забывайте о накладных расходах на обслуживание индекса, очистке фрагментации илилюбые триггеры.Они также могут повлиять на вашу систему.
В общем, я ставлю отметку в 1000 строк на утверждение.Большинство систем, с которыми я работал (под-предприятие), в конечном итоге получают от 500 до 5000 записей на удаление.Мне нравится делать что-то вроде этого:
set rowcount 500
select 1 -- Just to force @@rowcount > 0
while @@ROWCOUNT > 0
delete from [table]
[where ...]