Как удалить большое количество записей MS SQL

Следующий код позволит удалить большое количество записей с минимальными блокировками. Код подходит для MS SQL 2005 и более старших версий.

DECLARE @RowsDeleted INTEGER
SET @RowsDeleted = 1

WHILE (@RowsDeleted > 0)
BEGIN
DELETE TOP (10000) FROM TableName WHERE id < 4295200
SET @RowsDeleted = @@ROWCOUNT
END

Данный код в цикле удаляет по 10000 строк

@@ROWCOUNT возвращает количество строк затронутых последней операцией, в данном случае удалением. Как только строки удаляться перестанут, цикл завершится. Это значение нужно сохранять непосредственно после выполнения команды, иначе значение может измениться.

 

После удаления необходимо выполнить сжатие базы данных для уплотнения и очистки от мусора.

 DBCC SHRINKDATABASE(N'Database')

Так как вследствии уплотнения индексы могут фрагментироваться, то рекомендуется выполнить дефрагментацию индексов. Как это сделать описано в статье о дефрагментации индексов

Внимание! Не выполняйте код бездумно на боевой системе не опробовав его на тесте. Автор статьи не несёт ответственности за последствия.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *