Усечь или удалить и создать таблицу - PullRequest
17 голосов
/ 02 февраля 2012

У меня есть эта таблица в экземпляре SQL Server 2008 R2, в котором у меня запланированный процесс, который выполняется по ночам.Таблица может содержать до 500 тысяч записей одновременно.После обработки этой таблицы мне нужно удалить все строки из нее, поэтому мне интересно, какой из следующих методов приведет к наименьшим издержкам (т. Е. Записи излишнего журнала транзакций):

  1. Таблица усечения
  2. Удалите и заново создайте таблицу

Из-за нехватки времени из-за времени и дополнительных записей в журнале транзакций.

Консенсус, похоже, усечен, спасибо всем!

Ответы [ 4 ]

14 голосов
/ 02 февраля 2012

TRUNCATE TABLE - ваша лучшая ставка.От MSDN :

Удаляет все строки из таблицы без регистрации удаления отдельных строк.

Таким образом, это не приведет к увеличению объема транзакции.журнал.Удаление и создание таблицы требует не только более сложного SQL, но и дополнительных разрешений.Любые настройки, прикрепленные к таблице (триггеры, GRANT или DENY и т. Д.), Также должны быть восстановлены.

8 голосов
/ 02 февраля 2012

Усечение таблицы не оставляет построчных записей в журнале транзакций - так что ни одно из решений не будет слишком загромождать ваши журналы. Если бы это был я, я бы усугубил необходимость каждый раз отбрасывать и создавать.

5 голосов
/ 02 февраля 2012

Я бы пошел на TRUNCATE TABLE.Потенциально могут возникнуть накладные расходы, когда индексы, триггеры и т. Д. Сбрасываются.Кроме того, вы потеряете разрешения, которые также придется создавать заново вместе с другими необходимыми объектами, необходимыми для этой таблицы.

Также на DROP TABLE в MDSN под ним упоминается небольшая ошибка, если вы выполняете DROP и CREATE TABLE в той же партии

DROP TABLE и CREATE TABLEне может быть выполнен на той же таблице в той же партии.В противном случае может возникнуть непредвиденная ошибка.

2 голосов
/ 02 февраля 2012

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

...