如果我有一个表中始终为空的 mssql varchar[1024],那么将浪费多少实际字节?

Posted

技术标签:

【中文标题】如果我有一个表中始终为空的 mssql varchar[1024],那么将浪费多少实际字节?【英文标题】:If I have an mssql varchar[1024] that is always empty in a table, how much actual bytes will be wasted? 【发布时间】:2008-12-03 15:13:16 【问题描述】:

如果我有一个表中始终为空的 mssql varchar[1024],那么磁盘上的 db 文件中每行会浪费多少实际字节?

请告诉我两者的尺寸:

    NULL 允许存储 '' NULL 不允许存储 '' NULL 允许存储 NULL

由于最大 varchar 大小 > 2^1 且

【问题讨论】:

【参考方案1】:

我相信 varchar 仅使用保存字符串所需的最小存储空间。 MSDN 和在线书籍似乎证实了这一点。 但是,存储的数据(包括其他字段)的总和不能超过一定的长度(我认为是8K)。我认为您没有遇到此问题,因为我认为它在创建时已被标记。

更多详情在这里:http://doc.ddart.net/mssql/sql70/ca-co_3.htm

【讨论】:

【参考方案2】:

在允许空值的每一行中,都有一个空位图对象控制特定列的值是否为空。此位图的字节大小将为 NumberOfNullableColumns/8,四舍五入到下一个完整字节此外,varchar 长度的开销为 2 个字节。

考虑到这一点:

    存储空字符串的可空列 = 2 个字节(加上位图的 1 位) 存储空字符串的不可为空的列 = 2 个字节 可空列存储 null = 0 字节(加上 1 位用于位图)

【讨论】:

【参考方案3】:

取决于“空”是指 NULL 还是 ''。无论如何,在不知道表的 DDL 的情况下无法准确确定(它们都是 NOT NULL 列吗?一些空列?空列是什么意思?)但是计算字段偏移量的长度是每行 2 个字节为下一列。除非您有几十亿行,否则无需担心。即便如此,也不算多。

【讨论】:

更新了描述以表明我对 NULL 和 not null 这两种情况都感兴趣

以上是关于如果我有一个表中始终为空的 mssql varchar[1024],那么将浪费多少实际字节?的主要内容,如果未能解决你的问题,请参考以下文章

从始终返回空的点查找最近的位置

在 postgres 表中计算不为空的 json 键-> 值

使用默认值添加不可为空的列时的 Oracle 错误

java中当表中没有记录,为空的时候,用jpa查询的结果返回的是null吗?

geopip 记录始终为空?

如果它为空或为空,如何从序列化中忽略可为空的属性?