我正在测试以下模式在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
);
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是特殊情况,占用的磁盘空间少于其他值.