Как быстро удалить часть данных в БД MS SQL

Рейтинг: 1Ответов: 1Опубликовано: 16.03.2023

Один реквизит в таблице весит около 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 минут все обработалось