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

DB2 性能優化六大實戰技巧:索引策略、分區表、不記錄日志、表鎖、臨時表精簡、左連接寫法

     編輯:DB2 教學

技巧 1:索引建立時機決定性能與日志開銷

  • 插入前建索引: 索引隨數據實時維護,日志量大、插入慢,可用 NOT LOGGED INITIALLY 緩解。
  • 插入後建索引 (推薦大數據量): 載入數據 → RUNSTATS ON TABLE schema.tab AND INDEXES ALL 更新統計信息 → 優化器才會選擇索引訪問路徑。

技巧 2:大表放入多節點表空間 + 索引 = 線性擴展

單節點表空間 (如 DIM 維表空間) 受限於 2 CPU/4GB 記憶體。將大表按業務鍵分區到 32 節點表空間,查詢並行掃描 32 節點再匯總,吞吐量提升數十倍。配合索引效果更佳。

技巧 3:大批量寫入用 NOT LOGGED 模式

ALTER TABLE bigtab ACTIVATE NOT LOGGED INITIALLY WITH EMPTY TABLE;
-- 或 LOAD 時指定
LOAD FROM ... OF ... MODIFIED BY NOTLOGGED INSERT INTO bigtab;

代價: 操作失敗不可回滾,表只能刪除重建。僅用於可重跑的 ETL 階段。

技巧 4:表級鎖減少鎖開銷

ALTER TABLE tab LOCKSIZE TABLE;

鎖數量從行級 (百萬) 降為 1 個,節省鎖列表內存,降低鎖升級/死鎖概率。適合獨佔式批量載入/報表掃描場景。

技巧 5:臨時表只裝「用得上」的列與行

  • 業務邏輯中常用臨時表暫存中間結果,但往往 SELECT * 導入大量無用列/行。
  • 精簡列投影 + 謂詞下推 + 臨時表建索引,可將臨時表體積壓縮 80%+,Join 性能成倍提升。

技巧 6:左連接 (LEFT JOIN) 條件放置原則

-- ❌ 錯誤:主表過濾條件寫在 ON 中
SELECT * FROM main m LEFT JOIN sub s ON m.id=s.id AND m.status='ACTIVE';

-- ✅ 正確:ON 僅放連接鍵 + 右表過濾;主表過濾放 WHERE
SELECT * FROM main m LEFT JOIN sub s ON m.id=s.id AND s.type='VIP'
WHERE m.status='ACTIVE';

將主表過濾寫在 ON 中會改變語義 (變相轉為內連接) 並阻礙優化器下推,導致全表掃描與錯誤結果集。

總結

這六招涵蓋索引、存儲、日志、鎖、中間集、SQL 寫法六個維度,組合使用可解決 80%+ DB2 性能痛點。核心思想:讓優化器看到精準統計、讓並行度發揮、讓資源花在刀刃上。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved