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

資料庫索引設計準則與特徵完整指南

     編輯:DB2 教學

索引設計十大原則

  1. 權衡寫入與讀取:大量索引拖慢 INSERT/UPDATE/DELETE(需維護所有索引),但加速 SELECT。視工作負載比例決定索引數量。
  2. 組合索引威力:(ColA, ColB, ColC) 等同於 (ColA)、(ColA, ColB)、(ColA, ColB, ColC) 三個索引,節省空間並支援前綴查詢。
  3. 覆蓋索引消除回表:查詢欄位全包含於索引中,僅掃描索引頁不讀資料頁,大幅減少 I/O。代價是索引變寬、維護成本增。
  4. 小表不必索引:全表掃描可能比索引遍歷更快(避免隨機 I/O)。
  5. 善用工具輔助:SQL Profiler + Index Tuning Wizard 分析工作負載,自動推薦索引集,平衡查詢速度與更新成本。
  6. 視圖與計算欄可建索引:擴展索引應用範圍。
  7. 避免索引欄用 IS NULL/IS NOT NULL:含 NULL 值的列不進索引(單列索引無記錄,組合索引全 NULL 無記錄),導致索引失效。
  8. 選擇度準則:常查詢回傳 < 15% 行數的大表宜建索引。
  9. 95/5 法則:回傳 < 5% 總行數用索引最快;> 5% 全表掃描通常更優。
  10. PK/UK 自動索引,FK 需手動:外鍵欄位常用於 JOIN,強烈建議顯式建立索引。

索引特徵分類

  • 聚集 vs 非聚集:聚集索引決定資料物理順序,每表僅一個;非聚集索引存儲邏輯指標。
  • 唯一 vs 非唯一:唯一索引強制欄值唯一。
  • 單欄 vs 多欄 (組合):組合索引欄順序關鍵,遵循「最高選擇度在前」或「查詢 WHERE 子句順序」。
  • 遞增 vs 遞減:預設遞增,主流資料庫支援反向索引 (Descending) 優化 ORDER BY col DESC。
  • 覆蓋 vs 非覆蓋:是否包含查詢所需所有欄位。
  • 儲存特徵自訂:填充因子、檔案群組位置、分區對齊。
  • 位圖索引:低基數欄位(性別、狀態碼)適用,OLAP 環境常見。

實務建議

  • 定期 REORG / REBUILD INDEX 消除碎片。
  • 監控 syscat.indexes 統計資訊(NLEAF, NLEVELS, FULLKEYCARD)評估索引健康度。
  • 避免過度索引:每表 5-8 個索引為常見上限,視寫入比例調整。
  • 利用 INCLUDE 子句 (DB2) 將非鍵值欄位附加至索引,以低成本實現覆蓋查詢。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved