没有空列时设置空位图

时间:2017-07-21 08:04:54

标签: sql-server dbcc data-paging

我正在学习PAGE结构,目前我已经停留在NULL位图。

create table dbo.ro
(
ID int not null,
Col1 varchar(8000) null,
Col2 varchar(8000) null
);
insert into dbo.ro(ID, Col1, Col2) values
(1,replicate('a',8000),replicate('b',8000));

所以目前没有NULL值,让我们看看DBCC信息:

DBCC IND(test, 'ro', 1);
DBCC PAGE('test',1, 408,3);

enter image description here 所以我对以下部分感兴趣 30000800 01000000 03005002

  • 30 - BitsA
  • 00 - BitsB
  • 0800 - Fdata长度
  • 01000000 - 固定数据(ID = 1)
  • 0300 - 列数
  • 50 - NULL位图

为什么它是50而不是00?记录中没有NULL值...

1 个答案:

答案 0 :(得分:2)

正确的答案在评论中我赞成,但你还有一个问题,所以也许我应该解释一下这是什么意思。

  

底部三位为0.其他位应忽略。

如果您将50扩展为二进制文件,则会得到01010 000 。 唯一感兴趣的位是底部三位,这些对应于非空的3,2,1列。 应忽略其他位表示服务器知道列的数量,它是3,并且它只关心此掩码中的3位。其他位未设置,因此应忽略它们。它们只含有垃圾。