首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

Oracle TRUNCATE 與 DELETE 差異深度解析:效能、觸發器、高水位線與回滾段

     編輯:Oracle 資料庫相關知識

核心差異對照表

特性DELETETRUNCATE
指令類型DMLDDL
可回滾是(產生 UNDO)否(隱性提交)
觸發器觸發 DELETE TRIGGER不觸發任何觸發器
高水位線 (HWM)不重置重置至初始位置
執行速度慢(逐列刪除、記錄 UNDO)極快(僅更新資料字典)
WHERE 子句支援不支援(全表清空)
權限需求DELETE 權限DROP TABLE 權限
外鍵約束檢查並可 CASCADE若有啟用 FK 參考則失敗
空間釋放不自動釋放(保留 extent)預設 DROP STORAGE 釋放空間

實測情境

SQL> DESC t;
Name  Null? Type
----- ----- -------------
A     VARCHAR2(200)

SQL> TRUNCATE TABLE t;  -- 清理舊資料
SQL> SET TIMING ON
SQL> SELECT COUNT(*) FROM t;  -- 0 rows

選擇指南

  • 全表清空、重置測試資料、大量載入前準備 → TRUNCATE
  • 條件式刪除、需觸發稽核觸發器、需保留 HWM、外鍵關聯表 → DELETE
  • 大表刪除大部分資料:考慮 CREATE TABLE AS SELECT 保留需求資料 → DROP 舊表 → RENAME 新表

進階選項

TRUNCATE TABLE t REUSE STORAGE;  -- 保留 extent,不重置 HWM
TRUNCATE TABLE t DROP STORAGE;   -- 預設,釋放空間重置 HWM

注意事項

  • TRUNCATE 為 DDL,執行前後會隱性提交,無法在交易中回滾
  • 無法 TRUNCATE 父表(被 FK 參考),必須先 DISABLE CONSTRAINT
  • 12c+ 可搭配 CASCADE 選項自動處理參考分區表
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved