2010-04-09 88 views
2

我看到一些代碼,在刪除臨時表之前,作者已經立即刪除臨時表。是否有這樣做的理由?爲什麼要在刪除臨時表之前立即截斷?

TRUNCATE TABLE #Temp 
DROP TABLE #Temp 
+3

http://dba.stackexchange.com/questions/4163有一些優秀的分析。 TL; DR:DROP without TRUNCATE更有效。 – Constantin 2011-12-22 11:46:08

+0

很棒的發現。謝謝! – 2011-12-22 15:11:47

回答

2

可能是作者的印象是DROP TABLE會更快,如果表已經是空的,並且知道TRUNCATE會比DELETE更快。

0

可能要查看TRUNCATE命令是否由於存在外鍵而引發異常?

+0

我想這不是出於可能性的境界,但是這個特定的代碼不是在任何類型的錯誤處理塊 – 2010-04-09 15:35:53

+0

我想不出任何其他原因,然後,除了一個錯誤的假設(如答案中提到的CodeByMoonlight) – davek 2010-04-09 15:38:41

1

可能是一個關節頭。 (並不是我是完美的)。

1

在非常大的臨時表上,有時候先截斷然後再放下會更快,因爲truncate只是移動一個指針。通常不需要,因爲臨時表會自行刪除。

3

另一個原因是,DROP TABLE是完全記錄的操作,所以通過首先截斷(從不記錄),可以降低事務性日誌記錄開銷。

+0

聲音合理 – 2010-04-10 18:17:36

+0

我最近了解到truncate被記錄(但不像刪除是),但我理解你的觀點 – 2010-08-30 21:54:52

+0

喬你把它顛倒了。刪除記錄截斷不是。 +1亞歷克斯,因爲我不知道下降記錄(對我來說它沒有意義)。 – Paparazzi 2011-11-11 03:06:08

1

另一種可能性是編碼器試圖避免當臨時表大於8MB時發生延遲丟棄。即截斷它然後放下它。我不確定SQL引擎是否會被這個愚弄,但它可能會強制同步清理。我看不出爲什麼你想這樣做,也許爲了避免一些積累延遲滴(溫度表破壞)的問題