如题所述
方案1:表不存在稀疏列
a) 固定长度的列需要这个字段类型的全部空间,即使它的值是NULL或者空值。
b) 变长字段需要2个字节的额外开销存储数据,甚至它的值是NULL或者空值。
方案2:表存在稀疏列
这种情况跟上面第一种不同。所有稀疏列的值存储在一个复杂的结构中,这个结构叫做“稀疏矢量”。它将占用
4个字节的头 + 一组值不为空的列 + 一组列偏移 + 实际的数据
每行中每一个非空值,将会占用2个字节用于存放“列清单”的列id和2个字节存放这个字段在实际数据中的偏移量。这就意味着,稀疏列中的每一个非空值,将额外占用4个字节,空值则占用0字节。如果一行中所有列的值都是NULL,那么“稀疏矢量”将为空, 将占用0字节。
对于其他允许为空的列,请参照第一种情况。
对于那些非稀疏列,SQL Server使用NULL位图去指明它的值是否为NULL。一个字段对应的一个NULL值将占用1个比特空间的NULL位图,所以位图的大小是列数的八分之一,不包括稀疏列。
a) 固定长度的列需要这个字段类型的全部空间,即使它的值是NULL或者空值。
b) 变长字段需要2个字节的额外开销存储数据,甚至它的值是NULL或者空值。
方案2:表存在稀疏列
这种情况跟上面第一种不同。所有稀疏列的值存储在一个复杂的结构中,这个结构叫做“稀疏矢量”。它将占用
4个字节的头 + 一组值不为空的列 + 一组列偏移 + 实际的数据
每行中每一个非空值,将会占用2个字节用于存放“列清单”的列id和2个字节存放这个字段在实际数据中的偏移量。这就意味着,稀疏列中的每一个非空值,将额外占用4个字节,空值则占用0字节。如果一行中所有列的值都是NULL,那么“稀疏矢量”将为空, 将占用0字节。
对于其他允许为空的列,请参照第一种情况。
对于那些非稀疏列,SQL Server使用NULL位图去指明它的值是否为NULL。一个字段对应的一个NULL值将占用1个比特空间的NULL位图,所以位图的大小是列数的八分之一,不包括稀疏列。
温馨提示:答案为网友推荐,仅供参考