並置
並置(collocation)是安置同一個數據庫分區中包含相關數據的不同表中的行。並置的表使 DB2 可以更有效地使用連接策略。
您可能會發現,作為對特定查詢的響應,兩個或多個表頻繁地提供數據。在此情況下,您會希望這樣的表中的相關數據的位置盡可能地靠近。在數據庫被物理地劃分為兩個或多個數據庫分區的環境中,必須有一種方法可將劃分的表的相關碎片盡可能地靠近。完成此過程的功能稱為表並置。
當存取用於連接或子查詢的多個表時,DB2(R) 通用數據庫(DB2 UDB)能夠識別要連接的數據是否位於相同數據庫分區上。於是 DB2 就可以在存儲數據的數據庫分區上執行連接或子查詢,而不必在數據庫分區之間移動數據。這種局部地執行連接或子查詢的能力具有顯著的性能優點。
要發生並置,表必須:
在相同數據庫分區組中,且這個數據庫分區組不能處在再分配期間。(在再分配期間,數據庫分區組中的表可能使用不同的分區映射 —— 它們不是並置的。)
有包含相同數量的列的分區鍵。
分區鍵的相應列是分區兼容的。
如果一個表在一個單分區數據庫分區組中,且該分區組是在另一個表所在的同一個分區上定義的,那麼也可以發生並置。
總結:
比如int, char, varchar之類能夠被散列的數據類型就是分區兼容性得,其他類似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返回數據。