我有一个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。头脑=炸毁。