小编Ozr*_*ric的帖子

同一个表中的多个 BIT 数据类型列

考虑来自 Microsoft SQL 文档页面的以下信息:

SQL Server 数据库引擎优化位列的存储。如果表中有 8 个或更少位列,则这些列存储为 1 个字节。如果有 9 到 16 位列,则这些列存储为 2 个字节,依此类推。

请参阅:https : //docs.microsoft.com/en-us/sql/t-sql/data-types/bit-transact-sql?view=sql-server-2017

所以,如果我创建一个这样的新表:

CREATE TABLE MyTable (
    Id int PRIMARY KEY,
    Value1 bit,
    Value2 bit,
    Value3 bit,
    Value4 bit,
    Value5 bit,
    Value6 bit,
    Value7 bit,
    Value8 bit)
Run Code Online (Sandbox Code Playgroud)

...然后一行中的所有位列(Value1、Value2、...Value8)应占用一个字节。或者?

当我们仔细观察时,一行的 Value1 字段内部可以包含值 0、1 或 NULL。这意味着该字段实际上是三态值或三元值。2 个这样的值可以表示 3*3=9 个值的字典。8 个这样的值是一个包含 6561 个值的字典。

如果我们考虑这样一行的内存占用,8 位应该占用一个字节。这意味着这一字节编码 6561 个值而不是 256 个值。这显然是错误的。

因此,要么 MS SQL 文档具有误导性,要么我们在这里谈论一些量子计算。当然是前者,但我真正想知道的是这个问题的答案:可空位(当然,SQL Server 位默认可以为空)是如何真正存储在 SQL Server 底层结构中的?

null sql-server memory

7
推荐指数
1
解决办法
556
查看次数

标签 统计

memory ×1

null ×1

sql-server ×1