Возможно, вы захотите попробовать удалить также и в пакетном режиме. Я только что проверил это на имеющейся у меня таблице, и операция удаления изменилась с 13 до 3 секунд.
While Exists(Select * From YourTable Where YourCondition = True)
Delete Top (100000)
From YourTable
Where YourCondition = True
Я не думаю, что вы можете использовать предикат TOP, если вы используете SQL2000, но он работает с SQL2005 и выше. Если вы используете SQL2000, то вместо этого вы можете использовать этот синтаксис:
Set RowCount 100000
While Exists(Select * From YourTable Where YourCondition = True)
Delete
From YourTable
Where YourCondition = True