如果我有一个表中始终为空的 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 键-> 值