此文章主要向大家講述的是DB2分區兼容性認識與並置的概念描述,在實際操作中可以對分區鍵的對應列的基本數據類型,對其進行比較,並可將它們聲明為是分區兼容的(partition compatible)。
分區兼容的數據類型具有如下屬性:具有相同值但有不同類型的兩個變量會按相同的分區算法映射至同一個分區號。
最近在看一些DB2的DPF方面的東西,有兩個概念有一些搞不懂。
就是“DB2分區兼容性”和“並置”兩個概念。
查找了一些相關資料,內容如下:
分區兼容性
可對分區鍵的對應列的基本數據類型進行比較,並可將它們聲明為是分區兼容的(partition compatible)。分區兼容的數據類型具有如下屬性:具有相同值但有不同類型的兩個變量會按相同的分區算法映射至同一個分區號。DB2 分區兼容性具有下列特征:
基本數據類型與另一個相同的基本數據類型兼容。
內部格式用於 DATE、TIME 和 TIMESTAMP 數據類型。它們彼此都不兼容,且都不與 CHAR 兼容。
分區兼容性不受帶有 NOT NULL 或 FOR BIT DATA 定義的列的影響。
對兼容數據類型的 NULL 值的處理是完全相同的;對不兼容數據類型的 NULL 值的處理可能不相同。
用戶定義的類型的基本數據類型用於分析分區兼容性。
對分區鍵中相同值的小數的處理是完全相同的,即使它們的標度和精度不同。
字符串中(CHAR、VARCHAR GRAPHIC 或 VARGRAPHIC)的尾部空格會被散列算法忽略。
BIGINT、SMALLINT 和 INTEGER 是兼容的數據類型。
REAL 和 FLOAT 是兼容的數據類型。
不同長度的 CHAR 和 VARCHAR 是兼容的數據類型。
GRAPHIC 和 VARGRAPHIC 是兼容的數據類型。
DB2分區兼容性不適用於 LONG VARCHAR、LONG VARGRAPHIC、CLOB、DBCLOB 和 BLOB 數據類型,因為它們不能作為分區鍵。
並置
並置(collocation)是安置同一個數據庫分區中包含相關數據的不同表中的行。並置的表使 DB2 可以更有效地使用連接策略。
您可能會發現,作為對特定查詢的響應,兩個或多個表頻繁地提供數據。在此情況下,您會希望這樣的表中的相關數據的位置盡可能地靠近。在數據庫被物理地劃分為兩個或多個數據庫分區的環境中,必須有一種方法可將劃分的表的相關碎片盡可能地靠近。完成此過程的功能稱為表並置。
當存取用於連接或子查詢的多個表時,DB2(R) 通用數據庫(DB2 UDB)能夠識別要連接的數據是否位於相同數據庫分區上。於是 DB2 就可以在存儲數據的數據庫分區上執行連接或子查詢,而不必在數據庫分區之間移動數據。這種局部地執行連接或子查詢的能力具有顯著的性能優點。
要發生並置,表必須:
在相同數據庫分區組中,且這個數據庫分區組不能處在再分配期間。(在再分配期間,數據庫分區組中的表可能使用不同的分區映射 —— 它們不是並置的。)
有包含相同數量的列的分區鍵。
分區鍵的相應列是分區兼容的。
如果一個表在一個單分區數據庫分區組中,且該分區組是在另一個表所在的同一個分區上定義的,那麼也可以發生並置。
總結:
比如int, char, varchar之類能夠被散列的數據類型就是DB2分區兼容性得,其他類似LOB, LF等類型不能被散列的就不是
對於並置,比如我有兩個表A,B,其中A包含列c1 int, c2 char,B包含c1 varchar, c2 int
然後表A按照c1分區,表B按照c2分區,也就是說,當用戶插入一行數據到表A,首先會對A.c1進行散列,然後模分區數量,把新的數據插入相應的分區,而對於表B則是對B.c2進行相同算法散列。
這樣當查詢select * from c1,c2 where A.c1=B.c2的時候,由於A.c1和B.c2的數據類型相同,使用相同的散列算法,如果A.c1與B.c2相等,那麼他們肯定在同一分區,這樣的話進行join的時候就不需要再分區間移動數據,只需要在本分區join完後向coord partition返回數據。