Должен ли я TRUNCATE TABLE до того, как DROP TABLE, чтобы избежать накладных расходов на журналирование? - PullRequest
9 голосов
/ 05 июля 2011

Я понимаю, что использование TRUNCATE является минимально зарегистрированной операцией и не регистрирует удаление каждой записи, в то время как DROP регистрирует операции удаления.

Итак, можно ли предположить, что если я хочу избавиться от сравнительно большой таблицы и хочу, чтобы это происходило как можно БЫСТРЕЕ и с минимальными издержками при ведении журнала, я должен TRUNCATE TABLE до того, как DROP TABLE?Делает ли это что-то в RECOVERY SIMPLE какое-то различие?

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

Ответы [ 2 ]

10 голосов
/ 05 июля 2011

Хотя TRUNCATE не регистрирует отдельные строки, он регистрирует для страницы / экстента. Вот почему вы можете откатить усечение (о котором мало кто знает). Я предполагаю, что если вы просто урежете, то падение будет на самом деле медленнее, чем само падение. Если вы выполняете фиксацию между ними, возможно, нет, но это также будет зависеть от активности журнала, модели восстановления, попадания на контрольную точку и т. Д.

Почему здесь важна скорость? Не похоже, что пользователи используют таблицу, если вы собираетесь ее уронить ...

Почему бы тебе не проверить это? Если кто-то не провел обширное исследование по этому вопросу, охватывающее несколько различных переменных, я сомневаюсь, что вы получите гораздо больше, чем догадки с квазиобразованным образованием.

2 голосов
/ 05 июля 2011

По моему опыту, усечение намного быстрее, чем отбрасывание, особенно для больших наборов данных.

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