如何优化INTEGER的Sqlite DB文件大小?

时间:2015-02-07 12:10:54

标签: sqlite

我想在 sqlite 中构建一个 20,000,000 记录表,但文件大小比其TAB分隔的明文表示略强

有哪些优化数据大小存储的方法,特定于sqlite?

详细说明:

每条记录都有

  • 8整数
  • 3个枚举(现在表示为1个字节的文本),
  • 7 text

我怀疑这些数字没有有效存储(值范围10,000,000到900,000,000)

根据文档,如果存储为数字,我希望它们占用3-4个字节,如果存储为文本,则需要8-9个字节(可能是附加的终止字节或大小指示符字节),意味着1:2之间的比例存储为int:存储为文本)。

但它似乎不是这样。

1 个答案:

答案 0 :(得分:2)

你的整数应该至少需要3-4个字节(3个字节,最多2 ^ 24 = ~16,000,000)。此外,SQLite始终为每列存储至少一个字节作为大小信息(也适用于1字节文本 - 每个字节总计> 2字节)。

有些问题:

  • 您是使用复合主键还是普通整数以外的主键?
  • 您使用其他索引吗?
  • 您是否尝试过抽真空数据库? (命令" vacuum") - SQLite数据库不一定是自动清空的,因此当删除数据时,空间保持不变。

进一步:

  • 您是否已经拥有20,000,000或更少的参赛作品?对于小型数据库,存储开销可能比实际内容大小大得多。