MDC 核心優勢:自動維護的塊級聚簇
MDC(多維聚簇)以塊為單位組織數據,每塊等於一個擴展,塊索引僅記錄塊 ID(BID),體積約為傳統行索引的 1/1000。核心價值:
- 永不退化:插入時自動按維度值路由至對應塊,無需 REORG 重建聚簇
- 極速掃描:塊索引樹高極低,INDEX ANDing/ORing 效能極佳
- 滾入/滾出秒級:整塊掛載/卸載,避開行級鎖與日誌開銷
即使單維度 MDC 也優於傳統聚簇索引:聚簇率穩定 93%–100%,索引維護成本極低。
MDC 設計鐵律:控制單元數,追求高密度
單元 = 維度值組合的交集;塊 = 存儲單元的物理容器(1 個擴展)。每個單元至少佔用 1 塊,末尾塊常部分填充。若單元數過大(維度基數乘積過大),將導致:
- 海量空塊/稀疏塊 → 存儲膨脹 2–15% 甚至數倍
- I/O 放大 → 聚簇優勢抵消
實戰建模步驟:
- 候選維度 = 查詢謂詞(等值/範圍/排序)高頻列 + 滾入/滾出邊界列
- 用 SQL 測算單元數:
SELECT COUNT(*) FROM (SELECT DISTINCT dim1, dim2, dim3 FROM table) AS t
- 單元數 × 擴展大小 = 存儲增量上限,控制在表大小 5%–10% 以內
- 粗化高基數維度:用生成列將 DATE 粗化為 YEAR-MONTH(
INT(date)/100),PRODUCT NAME 取首字母等
反面教材:3 維各 10,000 基數且無相關性 → 1012 單元 → 500,000 TB 存儲災難。
MDC 適用性決策樹
首選 MDC,除非:
- 無法添加生成列進行粗化
- 無法接受 2–15% 存儲增長
- 極度追求 100% 聚簇率且願意定期 REORG
單維 MDC 依然值得採用:聚簇有保證、塊索引極小、刪除性能強(DB2 9.5 異步更新 RID 索引)、滾入滾出便捷。
數據庫分區特性(DPF):Share-Nothing 水平擴展
DPF 將表按哈希分區鍵分佈到多個邏輯節點(可跨物理機),實現近線性擴展,主攻數倉/BI 大並發查詢。OLTP 因節點間通訊開銷較少用。
分區鍵選擇雙目標
- 數據均勻:高基數列(唯一鍵最佳)
- 連接消除數據移動:頻繁連接的表共用分區鍵作為連接列(前提是基數足夠高)
最佳實踐清單:
- 分區鍵列數越少越好 → 增加出現在連接謂詞中的概率
- 唯一索引必須是分區鍵的超集
- 小表(<3% 資料庫或 <5% 最大表)或高頻更新表 → 用複製 MQT 廣播到所有節點