CSDN网页版的http://book.csdn.net/bookfiles/504/10050417359.shtml
用于存储地址、名字、URL的列的数据长度变动都比较大。那么我们来看看选择定长列与变长列之间的不同之处。在图6-3中使用的都是定长列,不论行中的实际数据长度是多少,每行都要占用384字节。对于这张表中的每条记录SQL Server还需要额外的10字节开销,因此存储每条记录总共需要394字节。即使把表中的地址列和名称列都填满,平均行大小也只不过是最大值的一成。图6-3  所有列都是固定长度的customer表表6-4  包含变长列的customer表在图6-4中,对于所有的变长列,假设平均记录长度实际上大约是最大值的一半。那么平均行长度不是394字节,而应该是224字节。这个长度是这样计算出来的:smallint和char(2)列加起来是4个字节;varchar列的最大总长度是380,折半就是190字节;再加上对于9个varchar列每个列都需要2字节的开销,共18字节;还有对于每条包含变长列记录的2字节的开销;另外,这些行与图6-3中的定长行一样需要10字节的开销,不论是否有变长列。因此总数就是4 + 190 + 18 + 2 + 10 = 224(本章稍后会讨论这些字节开销的实际意义)。
----------------------------------------------------
1,(还有对于每条包含变长列记录的2字节的开销)  他这个应该是指的变长列的数目占用的2字节吧?
2,(这些行与图6-3中的定长行一样需要10字节的开销) 我不知道这个表6-4里的这10字节是怎么算出来的,我加上了行偏移矩阵的2字节,也只不过9字节,只有2个定长列,null位图占用1字节就够了吧.他说10字节是怎么算的?

解决方案 »

  1.   

    1、varchar 类型除了实际字节占用的长度之外要另加2字节
      

  2.   

    2、请看你上面的
    用于存储地址、名字、URL的列的数据长度变动都比较大。那么我们来看看选择定长列与变长列之间的不同之处。在图6-3中使用的都是定长列,不论行中的实际数据长度是多少,每行都要占用384字节。对于这张表中的每条记录SQL Server还需要额外的10字节开销,因此存储每条记录总共需要394字节。即使把表中的地址列和名称列都填满,平均行大小也只不过是最大值的一成。 
      

  3.   


    图6-3
    状态位A   1字节
    状态位B   1字节
    列偏移    2字节
    列数目      2字节
    null位图    2字节,因为有11列定长列,表6-4 和上面一样,只是null位图,1字节,因为只有2列定长列,再加上行偏移,,一个是10字节,一个是9字节.
    表6-4 中的变长列数目和变长的额外2字节开销已经加上了 18+2
      

  4.   

    嗯,多谢了,:)我感觉差在那null位图上了
      

  5.   

    null位图  = ceiling(Ncol/8)所以不是你认为的9 而也是10
      

  6.   


    null位图 定长列和变长列都管么?还是只管定长列?