database – 意外的SQLite大小

我正在测试以下模式在SQLite(空间和查询/ s)中如何相互比较.

我的原始模式为每个bit_ *字段使用0或1值:

CREATE TABLE "original"
(
    "id"        TEXT NOT NULL,
    "bit_a"     INTEGER(1) NOT NULL DEFAULT 0,
    "bit_b"     INTEGER(1) NOT NULL DEFAULT 0,
    "bit_c"     INTEGER(1) NOT NULL DEFAULT 0
);

我的替代模式使用位掩码而不是0到7之间的值:

CREATE TABLE "alternative"
(
    "id"        TEXT NOT NULL,
    "bit_mask"  INTEGER(1) NOT NULL DEFAULT 0
);

根据SQLite documentation

INTEGER

Signed integer, stored in 1, 2, 3, 4, 6, or 8 bytes depending on the magnitude of the value.

我希望原始表中的每一行比备用表多占用2个字节.但是,在两个不同的数据库文件中插入完全相同的数据后,我发现替代版本实际上比原始版本大5.5%.

谁知道发生这种情况的原因?

最佳答案 查看SQLite文件格式文档,第2.1节.
https://www.sqlite.org/fileformat.html

整数值0和1是特殊情况,占用的磁盘空间少于其他值.

点赞