请问在建立了聚集索引的表内,数据页中的数据行是如何存储的?行和行之间是按照其聚集索引的之间的顺序存储的吗?如果是的话?为什么使用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中可以看到数据的确是按照字母顺序进行的排序,但是为什么偏移量却没有进行排序呢?而是保持了数据插入时的顺序,这是为什么?谢谢

解决方案 »

  1.   

    我觉得是这样的:
    虽然是聚集索引,但是在往页面写数据的时候,还是按照要求的顺序写。
    只不过在页头划出一个区域,用来按顺序记录该页面各个Slot的Offset。
    这样有个好处:
        按顺序写数据,只要调整Slot的Offset,而不需要调整页面上真正的数据顺序,速度快。上面是我的个人意见,明天查一下Inside SQL Server2000看看。
      

  2.   

    那你的意思是:聚集索引的表内的行不是按照聚集索引的顺序排序的?Inside SQL Server2000好像没有具体的介绍这块....
      

  3.   

    SQL Server2005中已经没有这个命令了。数据在有聚集索引的表中,是按照聚集索引顺序排列。