索引是 DB2 加速查詢的核心手段,但盲目建立索引會拖慢寫入效能、浪費儲存空間。本文提煉七大索引優化原則,幫助 DBA 與開發人員在「查詢加速」與「維護成本」間找到平衡點。
索引由排序鍵值組成,提供指向資料行的直接指標。優勢三重:
ORDER BY 時消除排序操作。在索引中包含 WHERE 子句所有過濾欄位,優化器可利用索引「屏蔽」直接排除不合格行,減少資料頁訪問。
對 ORDER BY 引用欄位建立索引 (單欄或作為組合索引前導欄),查詢可直接按索引順序返回,省去排序運算子。
每增加一個欄位,索引寬度增大、維護成本上升、緩衝池命中率下降。經驗值:單一組合索引欄位數控制在 5 個以內。
組合索引定義順序 = 查詢引用頻率由高到低。例如 (colA, colB, colC) 可支援 WHERE colA=?、WHERE colA=? AND colB=?、WHERE colA=? AND colB=? AND colC=? 三種模式。
基數 = 不重複值數量 / 總行數。基數越高 (如身分證號、交易流水號),索引過濾效果越好;低基數欄位 (性別、狀態碼) 單獨建索引效果差,適合位圖索引或作為組合索引尾部欄位。
INSERT/UPDATE/DELETE 頻繁的欄位會導致索引頻繁分裂、合併、標記刪除。例外:主鍵 (PK) 與外鍵 (FK) 必須建立索引以維護約束與 JOIN 效能。
WHERE col IS NULL 或 IS NOT NULL 條件下,優化器不會使用索引,導致全表掃描。WHERE、JOIN、ORDER BY、GROUP BY 高頻欄位。EXPLAIN 走索引掃描。INDEX_STATS、鎖等待與寫入延遲,持續迭代。