选择列值以最小化SQLite数据库的文件大小?

时间:2018-12-28 21:49:15

标签: sqlite compression

我有一个SQLite数据库,在其中我更改了表以添加一列,该列将为每行包含一种永久唯一的ID(除了现有的INTEGER PRIMARY KEY之外,该ID可能会重新分配,因此不是永久的) 。我还想避免意外地将普通ID与新的“永久ID”混淆在一起,因此,我决定使用TEXT列,并为每个值添加一个前缀,例如pid-

因此,我仅添加了名为perma_id的类型为TEXT的列,然后运行UPDATE mytable SET perma_id = 'pid-' || _rowid_为现有行分配值。然后,我保存并压缩/清理了数据库并将其压缩为zip文件,因为我会将其包含在Android APK中。

我注意到添加新列后,文件大小已从379kB增大到417kB。这当然是预期的。但是作为一个实验,我认为也许可以通过仅使用p...列值而不是pid-...来减小文件大小,所以我重新分配了所有值。但是令我惊讶的是,文件大小却增加了 到420kB!我作了进一步的实验,可以合理地使(压缩的)文件大小在perma_id下变为417kB,在pid-...下变为420kB。不出所料,使用p...列可进一步减小文件大小,但仅减小到414kB。

这让我想知道-在INTEGER列中使用较长的字符串作为前缀时,较小文件大小背后的黑魔法是什么?有没有一种方法可以确定哪个字符串将产生最小的文件大小?

编辑

只需尝试使用前缀perma_id,其压缩文件大小为414kB,即与使用perma-id-...列相同,仅在前缀后面加上数字。因此,我尝试使用INTEGER作为前缀-413kB。头脑=炸毁。

0 个答案:

没有答案