none
如何计算SQL Server 2008中一个允许为空的字段占用的空间? RRS feed

  • 常规讨论

  • 方案1:表不存在稀疏列
    a) 固定长度的列需要这个字段类型的全部空间,即使它的值是NULL或者空值。
    b) 变长字段需要2个字节的额外开销存储数据,甚至它的值是NULL或者空值。

    方案2:表存在稀疏列
    这种情况跟上面第一种不同。所有稀疏列的值存储在一个复杂的结构中,这个结构叫做“稀疏矢量”。它将占用
    4个字节的头 + 一组值不为空的列 + 一组列偏移 + 实际的数据
    每行中每一个非空值,将会占用2个字节用于存放“列清单”的列id和2个字节存放这个字段在实际数据中的偏移量。这就意味着,稀疏列中的每一个非空值,将额外占用4个字节,空值则占用0字节。如果一行中所有列的值都是NULL,那么“稀疏矢量”将为空, 将占用0字节。
    对于其他允许为空的列,请参照第一种情况。

    对于那些非稀疏列,SQL Server使用NULL位图去指明它的值是否为NULL。一个字段对应的一个NULL值将占用1个比特空间的NULL位图,所以位图的大小是列数的八分之一,不包括稀疏列。

     

    2011年10月26日 1:04
    版主