DB2 採用**成本基礎優化器(CBO)**,其決策品質直接取決於系統目錄中的統計資訊準確度。統計過期或缺失會導致錯誤存取路徑(如錯選 Table Scan 而非 Index Scan),嚴重拖慢查詢效能。本文系統整理統計資訊類型、收集時機、指令語法與特殊場景應對策略。
| 類別 | 關鍵指標 | 系統視圖 |
|---|---|---|
| Table | 記錄數、頁數、PCTFREE、COMPRESS | sysstat.tables、syscat.tables |
| Columns | 基數、平均長度、分布特徵、NULL 個數、次大/次小值 | sysstat.columns、syscat.columns |
| Index | 是否存在、層級數、葉頁數、鍵值基數、是否叢集索引 | sysstat.indexes、syscat.indexes |
| 其他 | 分區/節點組資訊、表空間資訊 | - |
db2 runstats on table db2inst1.staff with distribution and detailed indexes all
with distribution:收集分布統計(quantiles、frequent values),提升篩選估算精度detailed indexes all:詳細索引統計(叢集因子、頁面密度等)db2 runstats on table big_table tablesample bernoulli (20)
適用數據倉庫超大事實表,前提是資料分布均勻。
電信月末匯總表等短期內資料量劇變場景,統計資訊極易失真。標記為 Volatile:
alter table table_name volatile cardinality
db2 reorgchk current statistics on table all
db2 reorgchk update statistics on table all -- 同時更新統計
依據公式評估表/索引是否達到重組門檻(如 F1、F2、F3 指標)。
# 典型維護窗口腳本
db2 reorg table schema.tabname
db2 runstats on table schema.tabname with distribution and detailed indexes all
db2rbind db_name -l rebind.log all
先 REORG 整理物理存儲,再 RUNSTATS 更新邏輯統計,最後 REBIND 套用新統計產生最佳存取計畫。

統計資訊是優化器的「眼鏡」,定期清潔、度數精準,查詢效能才能持續在線。