|
原帖由 diablo2 于 2010-9-28 17:14 发表 ![]()
今天突然想到,DB2是怎么在INDEX里处理NULL的?
唉,回首07年往事,问得问题简直都是可笑的冬冬……
大波罗的问题:
比如我创建一个table
create table t1 (c1 int)
create index i1 on t1 (c1)
然后插入1,2,NULL
然后看index,我们有
0000 *3000D01F 02000000 0005010A 03000000* *0...............*
0010 *C2020000 05000000 00000000 35000000* *............5...*
0020 *F5E4F102 00000000 00000000 00000000* *................*
0030 *F501341B 0D021041 00000000 5E1BCC04* *..4....A........*
0040 *02000000 01000000 00000000 00000000* *................*
0050 *00000000 58005254 31300000 0E000500* *....X.RT10......*
0060 *00000000 00000A00 00000000 A5D4F102* *................*
0070 *00000000 00000000 00000000 00000000* *................*
0080 *00000000 00000000 00000000 01430040* *.............C..*
0090 *00000000 00000002 FF00FFFF 01000100* *................*
00A0 *00000000 00000100 04000100 F6030000* *................*
00B0 *00000300 00000300 A204B004 BE040000* *................*
00C0 *00000000 00000000 00000000 00000000* *................*
00D0 *00000000 00000000 00000000 00000000* *................*
00E0 *00000000 00000000 00000000 00000000* *................*
00F0 *00000000 00000000 00000000 00000000* *................*
然后在相对应得地方我们有
04A0 *00000E00 00010000 00040000 00000002* *................*
04B0 *0E000002 00000005 00000000 00020E00* *................*
04C0 *01000000 00060000 00000002 00000000* *................*
04D0 *00000000 00000000 00000000 00000000* *................*
04E0 *00000000 00000000 00000000 00000000* *................*
04F0 *00000000 00000000 00000000 00000000* *................*
0500 *00000000 00000000 00000000 00000000* *................*
这里,红绿黄各对应3个key,分别是1,2,NULL,对应的RID在棕色部分标出
每一个index key都是2字节长度+1字节NULL+Key+RIDList表示。如果NULL部分设置为1,也就是TRUE,就代表这个是NULL。
NULL key所在的位置是索引的末尾
[ 本帖最后由 wangzhonnew 于 2010-9-28 21:13 编辑 ] |
|