NOT LOGGED INITIALLY 載入。RUNSTATS ON TABLE ... AND INDEXES ALL 更新統計資訊,否則優化器不會使用索引。單節點表空間 (如 DIM) 僅能利用 2 CPU/4GB 記憶體。將大表建立分區鍵置於 32 節點表空間,查詢時 32 節點並行掃描,最後匯總至協調節點,效能提升數量級。配合索引效果更佳。
避免大量日誌爭用:
ALTER TABLE <t> ACTIVATE NOT LOGGED INITIALLY WITH EMPTY TABLE;
-- 大量 INSERT/LOAD
-- 完成後可選擇 COMMIT 或 ROLLBACK (失敗時表需重建)
注意:操作失敗無法回滾,僅適合可重建的暫存/階段表。
鎖數量有上限且佔用記憶體。對大量資料操作時,LOCK TABLE <t> IN EXCLUSIVE MODE 可大幅減少鎖個數,釋放資源。
許多 ETL 將完整寬表載入臨時表,導致臨時表龐大。應:
ON 條件僅包含:
主表過濾條件放在 WHERE 子句。錯誤寫法會導致計劃退化為內連接或產生錯誤結果集。
| 策略 | 關鍵動作 | 風險提示 |
|---|---|---|
| 索引時機 | 插入後建索引 + RUNSTATS | 插入前需大日誌空間 |
| 多節點分區 | 建分區鍵 + 多節點表空間 | 需規劃分區鍵分布均勻 |
| 不計日誌載入 | ACTIVATE NOT LOGGED INITIALLY | 失敗不可回滾,僅限可重建資料 |
| 表級鎖 | LOCK TABLE ... EXCLUSIVE | 並發度下降,評估業務容忍度 |
| 臨時表精簡 | 只載入必要欄位/資料 | 需分析下游使用場景 |
| LEFT JOIN | ON 僅放關聯鍵+右表過濾 | 主表過濾放 WHERE |