DB2數(shù)據(jù)庫(kù)并置發(fā)生時(shí),表要如何改變更?
以下的文章主要是介紹DB2數(shù)據(jù)庫(kù)并置,以及對(duì)要發(fā)生DB2數(shù)據(jù)庫(kù)并置這一情況,表必須要進(jìn)行配置的描述,以下就是文章的主要內(nèi)容的詳細(xì)描述,望大家在瀏覽之后會(huì)對(duì)其有更深的了解。
DB2數(shù)據(jù)庫(kù)并置
并置(collocation)是安置同一個(gè)數(shù)據(jù)庫(kù)分區(qū)中包含相關(guān)數(shù)據(jù)的不同表中的行。并置的表使 DB2 可以更有效地使用連接策略。
您可能會(huì)發(fā)現(xiàn),作為對(duì)特定查詢的響應(yīng),兩個(gè)或多個(gè)表頻繁地提供數(shù)據(jù)。在此情況下,您會(huì)希望這樣的表中的相關(guān)數(shù)據(jù)的位置盡可能地靠近。在數(shù)據(jù)庫(kù)被物理地劃分為兩個(gè)或多個(gè)數(shù)據(jù)庫(kù)分區(qū)的環(huán)境中,必須有一種方法可將劃分的表的相關(guān)碎片盡可能地靠近。完成此過程的功能稱為表并置。
當(dāng)存取用于連接或子查詢的多個(gè)表時(shí),DB2(R) 通用數(shù)據(jù)庫(kù)(DB2 UDB)能夠識(shí)別要連接的數(shù)據(jù)是否位于相同數(shù)據(jù)庫(kù)分區(qū)上。于是 DB2 就可以在存儲(chǔ)數(shù)據(jù)的數(shù)據(jù)庫(kù)分區(qū)上執(zhí)行連接或子查詢,而不必在數(shù)據(jù)庫(kù)分區(qū)之間移動(dòng)數(shù)據(jù)。這種局部地執(zhí)行連接或子查詢的能力具有顯著的性能優(yōu)點(diǎn)。
要發(fā)生DB2數(shù)據(jù)庫(kù)并置,表必須:
在相同數(shù)據(jù)庫(kù)分區(qū)組中,且這個(gè)數(shù)據(jù)庫(kù)分區(qū)組不能處在再分配期間。(在再分配期間,數(shù)據(jù)庫(kù)分區(qū)組中的表可能使用不同的分區(qū)映射 —— 它們不是并置的。)
有包含相同數(shù)量的列的分區(qū)鍵。
分區(qū)鍵的相應(yīng)列是分區(qū)兼容的。
如果一個(gè)表在一個(gè)單分區(qū)數(shù)據(jù)庫(kù)分區(qū)組中,且該分區(qū)組是在另一個(gè)表所在的同一個(gè)分區(qū)上定義的,那么也可以發(fā)生并置。
總結(jié):
比如int, char, varchar之類能夠被散列的數(shù)據(jù)類型就是分區(qū)兼容性得,其他類似LOB, LF等類型不能被散列的就不是
對(duì)于DB2數(shù)據(jù)庫(kù)并置,比如我有兩個(gè)表A,B,其中A包含列c1 int, c2 char,B包含c1 varchar, c2 int
然后表A按照c1分區(qū),表B按照c2分區(qū),也就是說,當(dāng)用戶插入一行數(shù)據(jù)到表A,首先會(huì)對(duì)A.c1進(jìn)行散列,然后模分區(qū)數(shù)量,把新的數(shù)據(jù)插入相應(yīng)的分區(qū),而對(duì)于表B則是對(duì)B.c2進(jìn)行相同算法散列。
這樣當(dāng)查詢select * from c1,c2 where A.c1=B.c2的時(shí)候,由于A.c1和B.c2的數(shù)據(jù)類型相同,使用相同的散列算法,如果A.c1與B.c2相等,那么他們肯定在同一分區(qū),這樣的話進(jìn)行join的時(shí)候就不需要再分區(qū)間移動(dòng)數(shù)據(jù),只需要在本分區(qū)join完后向coord partition返回?cái)?shù)據(jù)。
以上的相關(guān)內(nèi)容就是對(duì)DB2數(shù)據(jù)庫(kù)并置的介紹,望你能有所收獲。
【編輯推薦】
- DB2 9.5的數(shù)據(jù)庫(kù)內(nèi)存保護(hù),輕松掌握!
- DB2強(qiáng)制優(yōu)化器的使用“竅門”不得不看
- DB2快照函數(shù)如何正確理解?
- 使用重定向恢復(fù)DB2數(shù)據(jù)庫(kù)的操作技巧是什么?
- 使用DB2臨時(shí)表時(shí)哪些事項(xiàng)是值得關(guān)注?