首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> DB2 資料庫 >> DB2 教學

DB2 清空資料表四大方案深度對比:DELETE、NOT LOGGED、IMPORT/LOAD、DROP/CREATE

     編輯:DB2 教學

方案一:標準 DELETE 陳述式

DELETE FROM <table_name>;
優點缺點
標準 SQL,語意清晰;觸發 Trigger、檢查約束、RI 完整性 逐行寫入日誌,大表極慢;需大量日誌空間(LOGFILSIZ/LOGPRIMARY);高水位線不下降

適用:小表、需觸發器/RI 檢查、需可恢復(Point-in-time Recovery)。

方案二:ALTER TABLE ... ACTIVATE NOT LOGGED INITIALLY WITH EMPTY TABLE

ALTER TABLE <table_name> ACTIVATE NOT LOGGED INITIALLY WITH EMPTY TABLE;
優點缺點
不產生日誌,速度最快;瞬間完成 僅限建表時指定 NOT LOGGED INITIALLY 的表;操作不可恢復(崩潰後表損壞,需 DROP 重建);易誤用導致資料遺失

適用:臨時表、可重建的階段性資料、極大表且接受不可恢復風險。

方案三:IMPORT / LOAD FROM /dev/null REPLACE

-- Unix/Linux
IMPORT FROM /dev/null OF DEL REPLACE INTO <table_name>;
LOAD FROM /dev/null OF DEL REPLACE INTO <table_name> NONRECOVERABLE;

-- Windows (使用空檔案)
IMPORT FROM NUL OF DEL REPLACE INTO <table_name>;
LOAD FROM NUL OF DEL REPLACE INTO <table_name> NONRECOVERABLE;
優點缺點
不需表預先定義 NOT LOGGED;LOAD 速度極快(直接寫頁);可配合 NONRECOVERABLE 避免備份掛起 IMPORT 仍走日誌較慢;LOAD 需獨佔表鎖;REPLACE 會觸發 Trigger/RI(LOAD 不觸發);需考慮備份策略

關鍵差異:IMPORT 本質是批次 INSERT,走 SQL 引擎;LOAD 直接格式化資料頁寫入磁碟,繞過 SQL 層,效能高數量級。

方案四:DROP TABLE + CREATE TABLE

DROP TABLE <table_name>;
CREATE TABLE <table_name> (...);  -- 使用 db2look 獲取原始 DDL
優點缺點
瞬間釋放空間(高水位線歸零);索引、統計資訊同步重建;大表最快 需重建權限、Trigger、View、MQT 等相依物件;外鍵需先 DROP 再建;DDL 鎖定目錄表

綜合選擇決策樹

  1. 表 < 100 萬列 / 需完整日誌 / 有 Trigger/RI → DELETE(分批提交避免日誌爆滿)。
  2. 表極大 / 可接受不可恢復 / 建表時有 NOT LOGGED INITIALLY → ALTER ... WITH EMPTY TABLE。
  3. 表大 / 需高效 / 可接受短暫鎖表 / 有備份策略 → LOAD FROM /dev/null REPLACE NONRECOVERABLE。
  4. 需徹底重置(含高水位線、統計、碎片) / 相依物件少 / 有 DDL 腳本 → DROP + CREATE(配合 db2look -e -t tab 獲取 DDL)。

操作前必檢清單

  • 確認備份窗口與恢復策略(特別是 NONRECOVERABLE / NOT LOGGED 操作後)。
  • 大表 DELETE 時:db2 "CALL SYSPROC.ADMIN_CMD('RUNSTATS ON TABLE ...')" 更新統計;考慮 REORG 回收空間。
  • 生產環境變更前必在測試環境驗證腳本與耗時。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved