Лучшие практики использования усечения и отбрасывания для временных таблиц

Итак, я исследовал стандарты SQL в отношении использования TRUNCATE vs DROP. Моя компания пытается определить, следует ли использовать TRUNCATE перед DROP в качестве стандартного соглашения о кодировании или просто использовать DROP. Обычно мы всегда использовали TRUNCATE и DROP вместо просто DROP.

В соответствии с этим ранее отвеченным вопросом, похоже, нет причин использовать оба: https://dba.stackexchange.com/questions/4163/why-use-both-truncate-and-drop

Вышеупомянутая ссылка также касается того, что с TRUNCATE есть ненужные накладные расходы.

Однако, поскольку кажется, что многие люди все еще используют TRUNCATE и DROP вместо только DROP, каковы преимущества использования TRUNCATE перед DROP ??


person NikkiTheCrazyAsian    schedule 05.06.2014    source источник
comment
Использование TRUNCATE удалит все строки, кроме схемы ... с помощью DROP оба Gone. Тогда зачем делать лишние шаги. Просто DROP таблица напрямую, и поэтому DROP вводится. Более того, использование TRUNCATE перед DROP вовсе не стандарт ... вероятно, вместо этого низкий стандарт.   -  person Rahul    schedule 05.06.2014
comment
@ Рахул. . . Я думаю, что исторически DROP существовал первым, а TRUNCATE был введен как эффективный механизм для удаления всех строк в таблице без их регистрации. В противном случае я согласен с вашим комментарием.   -  person Gordon Linoff    schedule 05.06.2014
comment
Поправьте меня если я ошибаюсь. Вы можете выполнить откат после DROP, но после TRUNCATE откат невозможен.   -  person Luc M    schedule 05.06.2014
comment
@LucM, это теоретически, но в некоторых местах, где у меня есть красный (включая ссылку в сообщении OP), оба TRUNCATE / DROP можно откатить при использовании внутри блока TRANS.   -  person Rahul    schedule 05.06.2014
comment
Если вы понимаете, как внутри работают усечение и отбрасывание, я не понимаю, как усечение перед отбрасыванием может улучшить ситуацию. Что ты здесь думаешь? Drop просто освобождает все. Как можно было сделать его более эффективным?   -  person usr    schedule 05.06.2014
comment
@usr: Ваш комментарий был для меня или для другого комментатора? Я понимаю разницу между ними, я просто задаю вопрос, есть ли преимущества в использовании TRUNCATE перед DROP?   -  person NikkiTheCrazyAsian    schedule 05.06.2014
comment
@NikkiTheCrazyAsian, да, это было адресовано вам. Я рекомендую вам хотя бы приблизительно изучить, как работают эти две команды. Это позволяет вам легко сделать вывод. Я считаю бесполезным запоминать такие мелочи, как «Следует ли обрезать перед падением?». Я лучше разбираюсь во внутренностях, а потом отвечаю на все сам. Я рекомендую это, чтобы вам было легче работать с SQL Server.   -  person usr    schedule 05.06.2014
comment
Насколько я могу судить, этот вопрос полностью дублирует связанный вопрос. За исключением того, что вы говорите, что я это читал, но так ли это на самом деле правда? Все еще дубликат.   -  person usr    schedule 05.06.2014


Ответы (1)


Это зависит от вашей базы данных, движка и версии.

Пример: современная версия mysql выполняет TRUNCATE, выполнив DROP и воссоздав таблицу. Более старые версии, в зависимости от того, какая ошибка может возникнуть, удаляли записи из таблицы, что намного медленнее, чем удаление таблицы и ее воссоздание. Это не объясняет, почему вы должны TRUNCATE перед DROP, а скорее, почему вы должны DROP и воссоздать как оптимизированную версию truncate.

Другие базы данных, движки и версии могут иметь свои особенности.

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

person cs_alumnus    schedule 05.06.2014