当前位置:  开发笔记 > 数据库 > 正文

数据库中空值使用的空间

如何解决《数据库中空值使用的空间》经验,为你挑选了2个好方法。

如果列为null,是否会影响列使用的空间?使用的空间是否由列定义固定?这是因数据库而异.(我主要对SQL Server 2000感兴趣.)

澄清:这个问题与该专栏"可空"时会发生什么有关(这与Kritsen&gbn指出的另一点相关).问题是,当列实际为空(在某个特定行中)时是否存在任何保存.

...

Cadaeic为SQL Server提供了答案,在2008版本之前,SQL Server似乎没有节省成本,而根据Quassnoi,如果空列结束,您可以节省Oracle.谢谢你的答案,他们都很有帮助.



1> Taylor Gerri..:

在列中存储NULL不会特别花费或节省空间.对于固定长度数据,仍保留整个空间.

另一方面,可变长度数据仅需要数据的长度加上开销来存储实际长度.例如,VARCHAR(n)将使用2个字节的数据来指示实际长度,因此所需的存储空间始终为n + 2.

另外,应该提到的是,如果SET ANSI_PADDING ON,具有NULL值的char(n)将表现为VARCHAR(n).

无论如何,在使用SQL Server 2000或SQL Server 2005时,您将无法识别存储NULL的空间"节省".SQL Server 2008引入了稀疏列的概念,可以为主要为NULL的列节省成本.


如果零长度表示空字符串,那么SQL对空字符串使用什么?他们不一样.

2> Kristen..:

SQL Server有一个指示NULL的位.如果列定义为NOT NULL,则不使用此位

VARCHAR使用可变长度来存储数据(因此具有指示实际数据有多长的开销),而CHAR是固定宽度.

因此,在此基础上,CHAR(1)NOT NULL比VARCHAR(1)NOT NULL"更短",因为VARCHAR需要长度指示符,而CHAR将始终只使用一个字节.

编辑:请注意,有一个允许NULL的BIT字段需要两位来存储它!我经常看到没有考虑过的BIT字段,不需要存储NULL但是没有设置为NOT NULL因此无意中浪费了一些

推荐阅读
Life一切安好
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有