Одним из способов избежать регистрации при работе с большими наборами данных является использование SELECT / INTO. Это создаст новую таблицу, но ни одна из них не будет зарегистрирована.
Есть несколько вещей, на которые нужно обратить внимание при этом:
- Вычисляемые столбцы становятся обычными столбцами данных
- Должны быть установлены также столбцы индексации и идентификации
Если все сделано правильно, это может сэкономить не только место, но и время обработки.
Альтернатива - это то, что я сейчас делаю, например:
UPDATE [MyTable]
SET [Message] = REPLACE([Message], N'Content_Type', N'Content-Type')
Работает нормально, но обновляет всю таблицу, создавая один огромный набор транзакций, вместо этого вы можете сделать:
DECLARE @IDs TABLE ([id] int)
DECLARE @Batch TABLE ([id] int)
INSERT INTO @IDs ([ID]) SELECT [ID] FROM [MyTable]
WHILE EXISTS (SELECT TOP 1 [ID] FROM @IDs)
BEGIN
INSERT INTO @Batch ([ID]) SELECT TOP 1000 [Id] FROM @IDS
UPDATE [MyTable]
SET [Message] = REPLACE([Message], N'Content_Type', N'Content-Type')
WHERE [Id] IN (SELECT [Id] FROM @Batch)
DELETE @IDs WHERE [Id] IN (SELECT [Id] FROM @Batch)
DELETE @Batch
END
Это обновляет таблицу на 1000 строк одновременно, уменьшая размер транзакции.