2014-03-04 43 views
4

我正在测试以下模式在SQLite(空间和查询/ s)中如何比较。意外的SQLite大小

我的原始模式使用01值对于每个bit_*字段:

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 
); 

我的替代架构使用的位掩码,而不是用值范围从07

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

根据SQLite documentation

INTEGER

带符号整数,根据值的大小存储在1,2,3,4,6或8个字节中。

我希望在original表中每一行取2个比alternative表更多的字节。但是,在将完全相同的数据插入两个不同的数据库文件后,我发现alternative版本实际上是,比original版本大了5.5%

任何人都知道为什么会发生这种情况?

回答