3

我正在压缩数据库 ( SQLite),并且我正在尝试优化我在架构中分配的数据类型的大小。我掌握的数据大致可以分为3类数字。他们是:

  1. 101010000- 9 位数字
  2. 01, - 只有一或零
  3. 13.4567- 浮动类型。我只想在这里存储 13.45。

所有数字都将用于程序中的数学运算。我使用这个网站作为参考:http ://www.sqlite.org/datatype3.html

我想知道哪种数据类型的亲和性会给我最紧凑的数据库。我目前的数据库大小接近 40 GB!

谢谢您的帮助。

4

1 回答 1

5

在 SQLite 中,整数数据类型可以占用 1、2、4 或 8 个字节,具体取决于数据值有多大。布尔类型存储为整数 0 或 1,并且总是占用 1 个字节。REAL(浮点)数据需要 8 个字节来存储。如果您愿意将数据四舍五入为 2 位小数,您可能希望将浮点数据乘以 100 并将其存储为 4 字节整数值(并为每个值保存 4 个字节)。您提到的 9 个二进制数字应该需要 2 个字节来存储。

如何优化数据?有很多策略。如果您有很多布尔字段,您可能可以使用一个字节来存储最多 8 位。这应该可以让您将存储效率提高 8 倍。另一个好的策略是规范化您的数据:将其拆分为多个表。但是,这仅在您的数据模式允许这种拆分时才有效。

通常,如果索引过多,它们可能会显着增加磁盘上数据库的大小。正确的解决方案是使用 EXPLAIN 修改软件使用的实际 SQL 查询,找出并不真正需要的索引并删除它们。

最后,不要忘记使用 VACUUM FULL 可以使数据库占用尽可能小的磁盘空间,但运行它可能需要一段时间并且需要独占数据库锁。祝你好运!

于 2012-10-21T03:41:24.960 回答