SQL 刪除資料表資料:DROP、TRUNCATE、DELETE 差異與效能比較
三指令對比表
| 指令 | 刪除內容 | 保留結構 | 釋放空間 | 可 Rollback | 觸發 Trigger | 速度 |
| DROP TABLE | 資料+結構+索引+權限 | ❌ | ✅ | ❌ (DDL 隱式提交) | ❌ | 最快 |
| TRUNCATE TABLE | 所有資料 | ✅ | ✅ (重置 High Water Mark) | ❌ (DDL 隱式提交) | ❌ | 極快 |
| DELETE FROM | 符合 WHERE 的列 | ✅ | ❌ (保留 HWM,產生碎片) | ✅ (DML 記錄每列) | ✅ | 較慢 |
關鍵差異說明
- DROP:徹底移除表,如「解散整個班級」。
- TRUNCATE:清空資料、重置身分識別欄 (IDENTITY) 計數器、不觸發 DELETE Trigger、不可 Rollback。如「全班學生畢業離校,班級仍在」。
- DELETE:逐列刪除、記錄交易日誌、可 Rollback、觸發 Trigger、可帶 WHERE 條件。如「逐個開除學生」。
實測觀察
DELETE 後再插入,IDENTITY 不連續 (空間未釋放)。
TRUNCATE 後插入,IDENTITY 從種子重新開始 (空間已釋放)。
使用建議
- 需保留表結構、快速清空全表 →
TRUNCATE。
- 需條件刪除、需 Rollback、需觸發 Trigger →
DELETE。
- 不再需要該表 →
DROP。
- 父表被外鍵參考時
TRUNCATE 會失敗,需先移除 FK 或改用 DELETE。
copyright ©
萬盛學電腦網 all rights reserved