似乎很难找到有关此的准确信息。MSDN有一篇关于稀疏列的文章,以及在使用它们时应考虑哪些空百分比阈值。但是关于默认空存储空间使用的事实似乎很难得到。
一些消息来源声称 NULL 值不占用任何空间,但这意味着稀疏列首先毫无意义。有人声称只有表定义中的空位图会添加一个位来表示每个可为空的列,但没有进一步的开销。一些人声称固定长度的列(char、int、bigint 等)实际上使用了相同数量的存储空间,而不管值是否为空。
那么它是什么,真的吗?
假设我有一个数据库中所有可空列的列表,其中包含表中的总行数,以及每列和类型的 NULL 行数。我将如何准确计算 NULL 值现在使用了多少空间,然后我可以通过将列更改为稀疏来准确预测节省了多少空间?我可以很好地将 4 字节开销添加到非空行,但是当我不知道如何处理空行时它没有帮助?