我正在努力压缩数据库(SQLite
),我正在尝试优化我在架构中分配的数据类型的大小。我的数据可以大致分为3种类型的数字。他们是:
101010000
- 9位数0
或1
, - 只需一个或零13.4567
- 浮动类型。我想在这里存储13.45。所有数字都将用于程序中的数学操作。我使用此网站作为参考:http://www.sqlite.org/datatype3.html
我想知道哪种数据类型亲和力会给我最紧凑的数据库。我目前的数据库大小接近40 GB!
感谢您的帮助。
答案 0 :(得分:4)
在SQLite中,整数数据类型可以占用1,2,4或8个字节,具体取决于数据值的大小。 布尔类型存储为整数0或1,并始终占用1个字节。 REAL(浮点)数据需要8个字节来存储。如果您愿意将数据舍入为2位小数,则可能需要将浮点数乘以100并将其存储为4字节整数值(并且每个值保存4个字节)。 您提到的9个二进制数字应该需要2个字节来存储。
如何优化数据?有很多策略。 如果你有很多布尔字段,你可能可以使用一个字节来存储多达8位。这应该可以使您的存储效率提高8倍。 另一个好的策略是规范化您的数据:将其拆分为多个表。但是,这仅在您的数据模式允许此类拆分时才有效。
通常,如果索引太多,它们可能会显着增加磁盘上数据库的大小。正确的解决方案是修改使用EXPLAIN的软件使用的实际SQL查询,找出不需要的索引并删除它们。
最后,不要忘记使用VACUUM FULL会使数据库占用尽可能小的磁盘空间,但运行它可能需要一段时间并需要独占数据库锁。 祝你好运!