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

DB2 分區兼容性與並置 (下):並置原理、條件與 Join 性能優化實例

     編輯:DB2 教學

什麼是並置?

並置 是指將多個表中「邏輯相關」的行(如同一客戶的訂單、明細)物理存放在 同一數據庫分區 上。當 Join 或子查詢發生時,DB2 可在本地分區直接完成連接,避免跨分區數據傳輸,帶來數量級性能提升。

並置發生的四個必要條件

  1. 表屬於 同一數據庫分區組,且非再分配期間(再分配期間分區映射可能不一致)。
  2. 分區鍵 列數相同。
  3. 分區鍵對應列 分區兼容 (Partition Compatible) —— 核心要求,詳見上篇。
  4. 單分區表與多分區表並置:單分區表所在分區組定義在目標分區上即可。

分區兼容性速查 (回顧)

  • ✅ 兼容:同類型;BIGINT/SMALLINT/INTEGER;REAL/FLOAT;不同長度 CHAR/VARCHAR;GRAPHIC/VARGRAPHIC;尾部空格被忽略;NULL 處理一致;精度/標度不同的 DECIMAL。
  • ❌ 不兼容:DATE/TIME/TIMESTAMP 互不兼容,亦不兼容 CHAR;LOB/LONG/CLOB/BLOB 不可作分區鍵;用戶定義類型以基類型判定。

並置 Join 實戰推演

表 A(c1 INT, c2 CHAR) 按 c1 分區;表 B(c1 VARCHAR, c2 INT) 按 c2 分區。
查詢:SELECT * FROM A, B WHERE A.c1 = B.c2

  1. 插入數據時,DB2 對分區鍵值做 相同哈希算法 → 取模 → 定分區。
  2. A.c1 (INT) 與 B.c2 (INT) 類型兼容,哈希結果一致。
  3. 滿足 A.c1 = B.c2 的行 必然落在同一分區。
  4. Join 直接在本地分區完成,無需 SHIP 數據到協調節點,極大降低網絡/CPU 開銷。

設計建議

  • 維度表 (小) 廣播或單分區;事實表 (大) 按業務鍵 (如 customer_id) 分區。
  • 頻繁 Join 的表 統一分區鍵類型、順序、數量,刻意設計並置。
  • 避免在分區鍵上使用不兼容類型 (如 VARCHAR vs CHAR 雖兼容,但隱式轉換可能導致分區剪枝失效)。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved