|
行和行之间是按照其聚集索引的之间的顺序存储的吗?
如果是的话?为什么使用dbcc page命令查看的offset table信息中行和行之间的偏移量不是顺序增长呢?
例如: create table table5 ( col1 varchar(5) primary key )
insert into table5 values('b') insert into table5 values('f') insert into table5 values('c') insert into table5 values('a')
通过dbcc page得到的信息 DATA: Slot 0, Offset 0x84, Length 12, DumpStyle BYTE
Record Type = PRIMARY_RECORD Record Attributes = NULL_BITMAP VARIABLE_COLUMNS
Memory Dump @0x43FEC084
00000000: 30000400 0100fe01 000c0061 ††††††††††0..........a
Slot 1, Offset 0x60, Length 12, DumpStyle BYTE
Record Type = PRIMARY_RECORD Record Attributes = NULL_BITMAP VARIABLE_COLUMNS
Memory Dump @0x43FEC060
00000000: 30000400 0100fe01 000c0062 ††††††††††0..........b
Slot 2, Offset 0x78, Length 12, DumpStyle BYTE
Record Type = PRIMARY_RECORD Record Attributes = NULL_BITMAP VARIABLE_COLUMNS
Memory Dump @0x43FEC078
00000000: 30000400 0100fe01 000c0063 ††††††††††0..........c
Slot 3, Offset 0x6c, Length 12, DumpStyle BYTE
Record Type = PRIMARY_RECORD Record Attributes = NULL_BITMAP VARIABLE_COLUMNS
Memory Dump @0x43FEC06C
00000000: 30000400 0100fe01 000c0066 ††††††††††0..........f
得到的OFFSET TABLE信息为: OFFSET TABLE: ------------- Row - Offset 3 (0x3) - 108 (0x6c) 2 (0x2) - 120 (0x78) 1 (0x1) - 96 (0x60) 0 (0x0) - 132 (0x84)
虽然将offset table内的信息对应到Data中可以看到数据的确是按照字母顺序进行的排序,但是为什么偏移量却没有进行排序呢?而是保持了数据插入时的顺序,这是为什么?
感觉插入数据的时候sql server并没有按照索引的顺序进行调整,而是直接按照先后顺序进行了空间分配
还要说明一下:在这个试验中,插入的数据行的数据量足够小,并不会引起页的拆分等等
作者:佚名 | 文章来源:新疆二域设计 | 更新时间:2007-8-14 14:31:26
|