回答
可能是作者的印象是DROP TABLE會更快,如果表已經是空的,並且知道TRUNCATE會比DELETE更快。
可能要查看TRUNCATE
命令是否由於存在外鍵而引發異常?
我想這不是出於可能性的境界,但是這個特定的代碼不是在任何類型的錯誤處理塊 – 2010-04-09 15:35:53
我想不出任何其他原因,然後,除了一個錯誤的假設(如答案中提到的CodeByMoonlight) – davek 2010-04-09 15:38:41
可能是一個關節頭。 (並不是我是完美的)。
在非常大的臨時表上,有時候先截斷然後再放下會更快,因爲truncate只是移動一個指針。通常不需要,因爲臨時表會自行刪除。
另一個原因是,DROP TABLE
是完全記錄的操作,所以通過首先截斷(從不記錄),可以降低事務性日誌記錄開銷。
聲音合理 – 2010-04-10 18:17:36
我最近了解到truncate被記錄(但不像刪除是),但我理解你的觀點 – 2010-08-30 21:54:52
喬你把它顛倒了。刪除記錄截斷不是。 +1亞歷克斯,因爲我不知道下降記錄(對我來說它沒有意義)。 – Paparazzi 2011-11-11 03:06:08
另一種可能性是編碼器試圖避免當臨時表大於8MB時發生延遲丟棄。即截斷它然後放下它。我不確定SQL引擎是否會被這個愚弄,但它可能會強制同步清理。我看不出爲什麼你想這樣做,也許爲了避免一些積累延遲滴(溫度表破壞)的問題
- 1. 我們是否需要在刪除之前截斷大表?
- 2. 在事務中截斷Oracle臨時表,截斷* ALL *臨時表
- 3. 在sqlplus中執行立即截斷表
- 4. 表的截斷,刪除和刪除有什麼區別?何時選擇哪個?
- 5. 爲什麼要在創建臨時表之後使用EXEC?
- 6. 爲什麼臨時表在完成範圍後不能刪除?
- 7. 爲什麼要刪除我的臨時文件?
- 8. C:臨時文件在打開後立即刪除
- 9. mysql截斷表vs刪除
- 10. 臨時表在SSIS中立即丟棄
- 11. 爲什麼在原始截斷時DataTable副本會被截斷?
- 12. 爲什麼要截斷BytesIO搞砸了?
- 13. 爲什麼DataContractSerializer要截斷StringWriter?
- 14. 刪除當前spid的臨時表
- 15. 刪除臨時表
- 16. 爲什麼MySQL使用臨時表來刪除主鍵?
- 17. 爲什麼mysql緩存被刪除臨時表的列名?
- 18. Oracle - 截斷全局臨時表
- 19. ORA刪除/截斷
- 20. 爲什麼在迭代列表時爲什麼不能刪除當前元素?
- 21. 爲什麼臨時文件在NSIS中不被刪除?
- 22. 複製臨時文件在刪除之前
- 23. Oracle 10g爲什麼要to_char(日期時間)截斷字符串?
- 24. 爲什麼在需要之前選擇?
- 25. 刪除全球臨時表
- 26. 臨時表刪除行
- 27. 爲什麼我需要刪除(後刷新()),堅持()之前,在教義
- 28. 爲什麼TinyMCE在正確使用刪除鍵之前需要輸入內容?
- 29. 截斷或刪除並創建表
- 30. 未能刪除或截斷表
http://dba.stackexchange.com/questions/4163有一些優秀的分析。 TL; DR:DROP without TRUNCATE更有效。 – Constantin 2011-12-22 11:46:08
很棒的發現。謝謝! – 2011-12-22 15:11:47