空值是否可以节省存储空间?

时间:2010-12-28 13:07:01

标签: sql-server database null

  

可能重复:
  Space used by nulls in database

在存储空间方面哪些更有效?

  • 一个满空的nullable int列。
  • 一个充满零的int列。

我知道一个可空的列占用了1位额外的信息来存储它的空状态,但是做空值会保存数据库,为一个null的int分配32位吗?

(null语义和null的含义对于这个问题并不重要)

4 个答案:

答案 0 :(得分:14)

对于像nullable这样的固定宽度字段,无论值是否为null,所需的存储空间总是相同的。

对于可变宽度可空字段,值'NULL'占用零字节的存储空间(忽略该值以存储该值是否为null)。

答案 1 :(得分:4)

如果您使用的是SQL Server 2008,并希望列中包含大量NULL值,我建议您investigate Sparse Columns。它们针对存储NULL值进行了优化。

答案 2 :(得分:3)

SQL Server 2008为主要为NULL的列引入了Sparse columns

行的SPARSE列(NULL)使用0位存储。但如果有值,你需要支付4字节的罚款。

答案 3 :(得分:3)

0不为空。如果您没有该字段的值,请不要在其中粘贴零!我不能告诉你有多少次我遇到了基本上无法修复的错误,因为我们无法知道生产数据库中的零是真零还是假零。拥抱空值 - 是的,它们需要更多编码,但无论如何都要拥抱它们。