天地不仁,以万物为刍狗!

DB2 分区特性

上一篇 / 下一篇  2008-01-18 09:04:26 / 个人分类:db2

最近在看一些DB2的DPF方面的东西,有两个概念有一些搞不懂。ITPUB个人空间;P| u9O zb:T
就是“分区兼容性”和“并置”两个概念。ITPUB个人空间 H`"[ Per+t
资料是这样写的:
+RZc;n4SB |u ^0
6~Q7Q1v"N)?[3c0分区兼容性
7fQ{!\ G6Q y,aI0
3W R%fRM0p ~UE_0可对分区键的对应列的基本数据类型进行比较,并可将它们声明为是分区兼容的(partition compatible)。分区兼容的数据类型具有如下属性:具有相同值但有不同类型的两个变量会按相同的分区算法映射至同一个分区号。 分区兼容性具有下列特征:ITPUB个人空间l4T!]%}AUM0n

L p5\tE!~)|0~B0基本数据类型与另一个相同的基本数据类型兼容。
-Hi"ex}#M3M}3a0内部格式用于 DATE、TIME 和 TIMESTAMP 数据类型。它们彼此都不兼容,且都不与 CHAR 兼容。ITPUB个人空间 R BXJx^
分区兼容性不受带有 NOT NULL 或 FOR BIT DATA 定义的列的影响。
!Wp/x/wM0对兼容数据类型的 NULL 值的处理是完全相同的;对不兼容数据类型的 NULL 值的处理可能不相同。
o|Q\R~#`(I {!rU0用户定义的类型的基本数据类型用于分析分区兼容性。
8e/h,X n0n{0对分区键中相同值的小数的处理是完全相同的,即使它们的标度和精度不同。
{/D^E*I8Vy0字符串中(CHAR、VARCHAR GRAPHIC 或 VARGRAPHIC)的尾部空格会被散列算法忽略。
i2b%S]ngD0BIGINT、SMALLINT 和 INTEGER 是兼容的数据类型。
.}4KK0Vd$@(fG8{0REAL 和 FLOAT 是兼容的数据类型。
KOg)A/F:Rp:T/B0不同长度的 CHAR 和 VARCHAR 是兼容的数据类型。
mM+o%N0xl"d.g1N0GRAPHIC 和 VARGRAPHIC 是兼容的数据类型。ITPUB个人空间k D(vzt9V
分区兼容性不适用于 LONG VARCHAR、LONG VARGRAPHIC、CLOB、DBCLOB 和 BLOB 数据类型,因为它们不能作为分区键。
2M bz2C6iu*KX0
,FM6DdNVu"e0并置ITPUB个人空间p:[*V"D_D:C
并置(collocation)是安置同一个数据库分区中包含相关数据的不同表中的行。并置的表使 DB2 可以更有效地使用连接策略。ITPUB个人空间bwc.{2@:y1S

|"` v.Q M HT0您可能会发现,作为对特定查询的响应,两个或多个表频繁地提供数据。在此情况下,您会希望这样的表中的相关数据的位置尽可能地靠近。在数据库被物理地划分为两个或多个数据库分区的环境中,必须有一种方法可将划分的表的相关碎片尽可能地靠近。完成此过程的功能称为表并置。ITPUB个人空间"C DO#zR6@J

S?,r!y:jP0F;[0当存取用于连接或子查询的多个表时,DB2(R) 通用数据库(DB2 UDB)能够识别要连接的数据是否位于相同数据库分区上。于是 DB2 就可以在存储数据的数据库分区上执行连接或子查询,而不必在数据库分区之间移动数据。这种局部地执行连接或子查询的能力具有显著的性能优点。ITPUB个人空间3T ]\6f;]:W9m&o
ITPUB个人空间{0\R;my3}
要发生并置,表必须:
ge4^nA t0ITPUB个人空间{#QVN0xya&q
在相同数据库分区组中,且这个数据库分区组不能处在再分配期间。(在再分配期间,数据库分区组中的表可能使用不同的分区映射 —— 它们不是并置的。)
F7H)Dt6Lx0有包含相同数量的列的分区键。ITPUB个人空间#U1eJ;{Fp[K)O.h&a
分区键的相应列是分区兼容的。
pe-q].D0如果一个表在一个单分区数据库分区组中,且该分区组是在另一个表所在的同一个分区上定义的,那么也可以发生并置。

pub中这么回答:

比如int, char, varchar之类能够被散列的数据类型就是分区兼容性得,其他类似LOB, LF等类型不能被散列的就不是ITPUB个人空间 [[)q|5w)p@
对于并置,比如我有两个表A,B,其中A包含列c1 int, c2 char,B包含c1 varchar, c2 int
!dx9m!HkTePK0然后表A按照c1分区,表B按照c2分区,也就是说,当用户插入一行数据到表A,首先会对A.c1进行散列,然后模分区数量,把新的数据插入相应的分区,而对于表B则是对B.c2进行相同算法散列。ITPUB个人空间2b:c+k7axB
这样当查询select * from c1,c2 where A.c1=B.c2的时候,由于A.c1和B.c2的数据类型相同,使用相同的散列算法,如果A.c1与B.c2相等,那么他们肯定在同一分区,这样的话进行join的时候就不需要再分区间移动数据,只需要在本分区join完后向coord partition返回数据


TAG:

 

评分:0

我来说两句

显示全部

:loveliness: :handshake :victory: :funk: :time: :kiss: :call: :hug: :lol :'( :Q :L ;P :$ :P :o :@ :D :( :)

日历

« 2008-09-09  
 123456
78910111213
14151617181920
21222324252627
282930    

数据统计

  • 访问量: 8308
  • 日志数: 268
  • 图片数: 1
  • 文件数: 2
  • 建立时间: 2007-12-01
  • 更新时间: 2008-09-05

RSS订阅

Open Toolbar