如何计算NULL值所使用的存储空间



似乎很难找到关于这方面的准确信息。MSDN有一篇关于稀疏列的文章,以及在使用稀疏列时应该考虑哪些空百分比阈值。但是关于默认空存储空间使用的事实似乎很难得到。

一些来源声称NULL值不占用任何空间,但这意味着稀疏列首先是毫无意义的。有些人声称,只有表定义中的空位图添加了表示每个可空列的位,但没有进一步的开销。有些人声称,固定长度的列(char, int, bigint等)实际上消耗了相同数量的存储空间,无论值是否为空。

那么到底是哪一个呢?

假设我有一个数据库中所有可空列的列表,其中包含表中的总行数,以及每个列和类型的空行数。我如何准确地计算NULL值现在使用了多少空间,以便我可以通过将列改为稀疏来准确地预测节省了多少空间?我可以将4字节的开销添加到非空行中,但是当我不知道如何处理空行时,它没有帮助?

  • 对于固定长度类型,如int NULL,它总是使用类型的长度(即4字节的int,无论它被设置为NULL或NOT NULL)。

  • 对于可变长度类型,在可变长度列偏移列表中存储NULL + 2字节需要0字节。这用于记录每个可变长度值在页面上的行中实际存储的位置。

此外,NULL或NOT NULL标志为每列使用1位。一个有12列的表将使用12/8字节(=2字节NULL位图)。

这个链接会给你更多关于这个主题的信息

一旦您知道NULL的百分比,您可以查看此链接以估计潜在增益。

最新更新