请问在建立了聚集索引的表内,数据页中的数据行是如何存储的?行和行之间是按照其聚集索引的之间的顺序存储的吗?如果是的话?为什么使用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')
得到的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中可以看到数据的确是按照字母顺序进行的排序,但是为什么偏移量却没有进行排序呢?而是保持了数据插入时的顺序,这是为什么?谢谢
中没行之间的偏移量不是顺序增长呢?例如:
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')
得到的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中可以看到数据的确是按照字母顺序进行的排序,但是为什么偏移量却没有进行排序呢?而是保持了数据插入时的顺序,这是为什么?谢谢
虽然是聚集索引,但是在往页面写数据的时候,还是按照要求的顺序写。
只不过在页头划出一个区域,用来按顺序记录该页面各个Slot的Offset。
这样有个好处:
按顺序写数据,只要调整Slot的Offset,而不需要调整页面上真正的数据顺序,速度快。上面是我的个人意见,明天查一下Inside SQL Server2000看看。