在sqlite中表示varchars

时间:2014-08-06 17:23:43

标签: sql database sqlite enums varchar

我有一个相当大的sqlite数据库,其中一列是varchar,但只占用几个值(基本上是枚举)。由于数据库文件已经是几GB并且正在增长,我开始重构该列以保存id(基本上是来自另一个表中少数varchars去的外键)。

我觉得这可能是徒劳的;也许sqlite会“智能地”处理这种情况,而不是天真地将每个varchar存储在所有其他varchar中。

所以问题是sqlite如何处理列中重复varchar值的表示,并将从varchars转换为id来削减db文件大小?

1 个答案:

答案 0 :(得分:0)

SQLite's internal record format中,足够小的数字可以存储在一个字节中。 字符串值不以任何方式压缩;一个五个字符的字符串总是占用五个字节(或者非ASCII字符的更多字符)。

如果您的varchar值都是单个ASCII字符,则用数字替换它们不会改善占用的空间。如果它们更大,它会。