Инкрементное удаление - как это выгодно? - PullRequest
4 голосов
/ 08 октября 2010

Если у меня есть таблица с огромным количеством данных ... и если я делаю добавочное удаление вместо "однократного удаления" ... какая польза?

Одноразовое удаление

 DELETE table_1
     WHERE BID = @BID
    AND CN = @CN        
     AND PD = @PD;  

Инкрементное удаление

While (1=1)
Begin
 DELETE TOP (100000) FROM table_1
     WHERE BID = @BID
    AND CN = @CN        
     AND PD = @PD;  

If @@rowcount = 0   -- No row affected.
  BREAK
 ELSE
  Continue
End

Я получил помощь от Удаление данных в таблице SQL Server занимает много времени

Ответы [ 4 ]

3 голосов
/ 08 октября 2010

Зависит от конфигурации, я видел большие удаления, которые взрывают журнал транзакций и вызывают сбой при нехватке места на диске.

Вы также можете избежать повышения блокировки, используя меньшую партию.

1 голос

Я новичок в случае настройки БД ....: (

Я тоже ...
но мне не нужно разбираться в технических тонкостях (таких как увеличение замка и т. д.), чтобы почувствовать / угадать преимущества употребления в пищу / кусания арбуза маленькими кусочками против того, чтобы положить его одним куском в рот

1 голос
/ 08 октября 2010

Разница заключается в размере информации отката.

SQL Server является транзакционным, до того как удаление будет зафиксировано, должна быть возможность откатить транзакцию.

Возьмите следующий пример:

  • Свободное место на жестком диске 10 ГБ
  • Информация, подлежащая удалению 20 ГБ

При запускеЖурнал удаления транзакций будет расти до тех пор, пока диск не будет заполнен, а затем будет зависать.

Даже при наличии достаточного дискового пространства возникают другие проблемы, блокировка базы данных или снижение производительности.Это может быть серьезной проблемой при удалении данных из работающей системы.

1 голос
/ 08 октября 2010

Кроме того, вы можете экспортировать данные, которые хотите сохранить, обрезать таблицу и загрузить данные обратно. Это может быть быстрее. Даже если вы хотите сохранить 50% ваших данных, они все равно могут быть быстрее - усечение только минимально регистрируется. Запустите свои собственные тесты

...