NOT LOGGED INITIALLY 緩解。RUNSTATS ON TABLE schema.tab AND INDEXES ALL 更新統計信息 → 優化器才會選擇索引訪問路徑。單節點表空間 (如 DIM 維表空間) 受限於 2 CPU/4GB 記憶體。將大表按業務鍵分區到 32 節點表空間,查詢並行掃描 32 節點再匯總,吞吐量提升數十倍。配合索引效果更佳。
ALTER TABLE bigtab ACTIVATE NOT LOGGED INITIALLY WITH EMPTY TABLE;
-- 或 LOAD 時指定
LOAD FROM ... OF ... MODIFIED BY NOTLOGGED INSERT INTO bigtab;
代價: 操作失敗不可回滾,表只能刪除重建。僅用於可重跑的 ETL 階段。
ALTER TABLE tab LOCKSIZE TABLE;
鎖數量從行級 (百萬) 降為 1 個,節省鎖列表內存,降低鎖升級/死鎖概率。適合獨佔式批量載入/報表掃描場景。
SELECT * 導入大量無用列/行。-- ❌ 錯誤:主表過濾條件寫在 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 性能痛點。核心思想:讓優化器看到精準統計、讓並行度發揮、讓資源花在刀刃上。