Как быстро удалить часть данных в БД MS SQL
Один реквизит в таблице весит около 20 Гб.
Этот реквизит по сути не важен, то есть мне уже не нужны данные, которые были записаны в БД в том году, но важны будут данные этого реквизита этого года.
Нужно уменьшить эту цифру. Мой вариант решения проблемы:
Хочу занулить данные этого реквизита, чтобы уменьшить память. Этот реквизит может содержать сотни тысяч символов, всего строк на зануление 850 000
Мой запрос:
update _Document167
set _Fld685 = 0
where _Fld670 < '2023-01-01 00:00:00'
Запрос выполнялся 3 часа и я не выдержал и отменил, отмена запроса происходила полчаса.
Подскажите, все ли я правильно делаю для моей цели? и стоит ли просто поставить запрос на выполнение и ждать часами или можно попробовать что-то другое для более быстрого достижения результата?
Ответы (1 шт):
Решил проблему написанием цикла:
DECLARE @RowsUpdated INTEGER
SET @RowsUpdated = 1
WHILE (@RowsUpdated > 0)
BEGIN
UPDATE TOP (1000) _Document168
SET _Fld748 = ''
WHERE _Fld733 < '2023-01-01 00:00:00' AND _Fld748 != ''
SET @RowsUpdated = @@ROWCOUNT
END
Если раньге надо было ждать более 3 часов и не дождаться, то тут за 40 минут все обработалось