我正在使用SQLite DB,其中所有列都是NVARCHAR数据类型。
来自MS SQL背景我知道NVARCHAR还有其他相关的包袱,我的第一个冲动是重构大多数列类型以强制执行具体的字符串长度(大多数都在50个字符以下)。
但与此同时,我知道SQLite对待事物有点不同。
所以我的问题是我应该更改/重构列类型吗?通过这样做,在SQLite的磁盘空间或性能方面有什么好处吗?
数据库在Android / iOS设备上运行。
谢谢!
答案 0 :(得分:0)
您应该阅读https://www.sqlite.org/datatype3.html。
CHARACTER(20),VARCHAR(255),VARYING CHARACTER(255),NCHAR(55) NATIVE CHARACTER(70),NVARCHAR(100),TEXT和CLOB被视为TEXT。
SQLite也不强制执行长度。
答案 1 :(得分:0)
因此,我没有挖掘批评文档,而是尝试了一些列类型。
我正在使用的数据库拥有超过100万条记录,大多数列都是NVARCHAR,因此在文件大小增量中很容易看到列数据类型的任何更改。
以下是我为减少数据库大小而找到的结果:
NVARCHAR: 最大的节省来自于尽可能将列类型从NVARCHAR切换到普通INT或FLOAT。在80MB的DB文件上,以兆字节为单位,非常值得注意。通过一些额外的重构,我将大小降低到47MB。
NVARCHAR与VARCHAR: 差别很小,也就是大小为80MB的DB上的几KB(
NVARCHAR与其他字符串类型: 在各种基于字符串的类型之间切换几乎没有区别,因为文档指出所有字符串类型都在SQLite中存储完全相同,如TEXT
INT vs OTHER数字 没有区别,SQLite最后将所有数据都存储为NUMBER。
基于NVARCHAR列的索引也占用了更多空间,一旦在INT列上重新编制索引,我就减少了几个MB