Roc*_*ngh 113 t-sql sql-server null sql-server-2005
I have a large table with say 10 columns. 4 of them remains null most of the times. I have a query that does null value takes any size or no size in bytes. I read few articles some of them are saying :
http://www.sql-server-citation.com/2009/12/common-mistakes-in-sql-server-part-4.html
There is a misconception that if we have the NULL values in a table it doesn't occupy storage space. The fact is, a NULL value occupies space – 2 bytes
甲
NULL在数据库中的值是一个系统值占用一个字节存储的并指示值不存在,而不是一个空间或零或任何其他的默认值.
你可以指导我关于空值的大小.
Mar*_*ers 141
如果字段是固定宽度,则存储NULL将占用与任何其他值相同的空间 - 字段的宽度.
如果字段是可变宽度,则NULL值不占用空间.
除了存储空值所需的空间之外,还存在具有可空列的开销.对于每一行,每个可空列使用一位来标记该列的值是否为空.无论列是固定的还是可变长度,都是如此.
您在其他来源的信息中观察到的差异的原因:
第一篇文章的开头有点误导.该制品不谈论存储NULL值的成本,但具有的成本的能力来存储NULL(即制备柱可为空的成本).确实,在存储空间中花费一些东西来使列可以为空,但是一旦你完成了它,它存储NULL所需的空间比存储一个值所需的空间要少(对于可变宽度列).
第二个链接似乎是一个关于Microsoft Access的问题.我不知道Access如何存储NULL的细节,但如果它与SQL Server不同,我不会感到惊讶.
Joh*_*hnB 30
以下链接声称如果列是可变长度,即varchar然后NULL取0个字节(加上1个字节用于标记值是否为NULL):
上面的链接,以及下面的链接,声称对于固定长度列,即char(10)或int,值NULL占用列的长度(加上1个字节来标记它是否是NULL):
例子:
char(10)为NULL,则占用10个字节(清零)int需要4个字节(也置零).varchar(1 million)设置为NULL取0字节(+ 2个字节)注意:在略微切线上,存储大小为varchar输入的数据长度+ 2个字节.