2010-04-09 3 views
2

Я вижу некоторый код, где автор обрезал временную таблицу непосредственно перед тем, как отбрасывать таблицу temp. Есть ли причина для этого?Зачем вам обрезать сразу перед тем, как сбросить временную таблицу?

TRUNCATE TABLE #Temp 
DROP TABLE #Temp 
+3

http://dba.stackexchange.com/questions/4163 имеет отличный анализ. TL; DR: DROP без TRUNCATE более эффективен. – Constantin

+0

Отличная находка. Благодаря! –

ответ

2

Возможно, у автора сложилось впечатление, что DROP TABLE будет быстрее, если таблица уже была пустой, и знал, что TRUNCATE будет быстрее, чем DELETE.

0

Возможно, чтобы увидеть, если команда TRUNCATE генерирует исключение из-за существующие внешние ключи?

+0

Я полагаю, что это не из сферы возможностей, но этот конкретный код не находится в каком-либо блоке обработки ошибок. –

+0

Я не могу думать ни о какой другой причине, кроме неправильного предположения (как упоминалось в ответе от CodeByMoonlight) – davek

1

В очень больших временных таблицах иногда быстрее усекать, а затем капли, потому что усечение просто перемещает указатель. Обычно это не нужно, поскольку временные таблицы теряются сами по себе.

3

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

+0

Звучит разумно –

+0

Недавно я узнал, что truncate зарегистрирован (но не как удаление), но я понимаю вашу точку. –

+0

Joe вы получили это вспять. Удалить - logged truncate - нет. +1 Алекс, поскольку я не знал, что капля была зарегистрирована (и для меня это не имеет смысла). – Paparazzi

1

Другая возможность заключается в том, что кодер пытается избежать отложенного падения, которое произойдет, когда таблица temp больше 8 МБ. То есть укоротите его, затем опустите. Я не уверен, будет ли этот движок SQL обманут, но это может заставить синхронную очистку. Я не понимаю, почему вы хотите это сделать, возможно, чтобы избежать какой-либо проблемы с накоплением отложенных капель (таблицы Temp для уничтожения)