Я пишу процедуру для удаления всех строк из нескольких таблиц в течение n дней.
Простой простой запрос, который легко написать
DELETE FROM [myTable]
WHERE [Created] < GETDATE()-30
Одна проблема - нетиндекс в поле даты - я мог бы добавить один, но я работал над этим, делая что-то вроде:
SELECT @var = MAX([ID]) FROM myTable WHERE Created < GETDATE()-30;
DELETE FROM myTable WHERE ID < @var
Это кажется приемлемым методом?
Проблема в таблицеогромен, и этот запрос будет удалять вероятные сотни тысяч строк при каждом запуске.
Запуск его на (немного медленном) тестовом сервере занимает около часа, и убивает таблицу из других процессов, пытаясьдля чтения / записи в него.
Я не очень-то возражаю против того, что для запуска потребуется некоторое время (хотя чем быстрее, тем лучше) - но я не могу заставить его блокировать таблицу в течение часа, пока он работает,поскольку происходят постоянные операции чтения / записи (в основном записи).
Мои знания БД довольно просты, так как я программист, а не dba.
Может кто-нибудь дать мне достойный методдля выполнения этой задачи - максимально эффективнопуть возможен.