SQLite 数据库大小列数据类型注意事项
SQLite DB Size Column Data Type Considerations
我正在使用 SQLite 数据库,其中所有列都是 NVARCHAR 数据类型。
来自 MS SQL 背景我知道 NVARCHAR 有额外的负担,我的第一个冲动是重构大多数列类型以强制执行具体的字符串长度(大多数长度低于 50 个字符)。
但同时我知道 SQLite 处理事情的方式有点不同。
所以我的问题是我应该 change/refactor 列类型吗?这样做在磁盘 space 或 SQLite 中的性能方面有什么好处吗?
DB 在 Android/iOS 台设备上运行。
谢谢!
你应该阅读 https://www.sqlite.org/datatype3.html。
字符 (20)、VARCHAR(255)、可变字符 (255)、NCHAR(55)
NATIVE CHARACTER(70)、NVARCHAR(100)、TEXT 和 CLOB 被视为 TEXT。
而且 SQLite 不强制长度。
因此,我没有深入研究评论家文档,而是对列类型进行了一些试验。
我正在使用的数据库有超过 100 万条记录,大多数列为 NVARCHAR,因此在文件大小增量中很容易看到列数据类型的任何更改。
以下是我在努力减小数据库大小时发现的结果:
NVARCHAR:
最大的节省来自尽可能将列类型从 NVARCHAR 切换为普通 INT 或 FLOAT。在一个 80MB 的 DB 文件上,以兆字节为单位,非常明显。通过一些额外的重构,我将大小降低到 47MB。
NVARCHAR 与 VARCHAR:
差别很小,在 80MB 大小的数据库上可能只有几 KB
NVARCHAR 与其他字符串类型:
在各种基于字符串的类型之间切换几乎没有区别,因为文档指出所有字符串类型在 SQLite 中都以相同的方式存储,如 TEXT
INT 与其他数字
这里没有区别,SQLite 最后都存储为 NUMBER。
基于 NVARCHAR 列的索引也占用了更多 space,一旦在 INT 列上重新建立索引,我减少了一些 MB
我正在使用 SQLite 数据库,其中所有列都是 NVARCHAR 数据类型。
来自 MS SQL 背景我知道 NVARCHAR 有额外的负担,我的第一个冲动是重构大多数列类型以强制执行具体的字符串长度(大多数长度低于 50 个字符)。
但同时我知道 SQLite 处理事情的方式有点不同。
所以我的问题是我应该 change/refactor 列类型吗?这样做在磁盘 space 或 SQLite 中的性能方面有什么好处吗?
DB 在 Android/iOS 台设备上运行。
谢谢!
你应该阅读 https://www.sqlite.org/datatype3.html。
字符 (20)、VARCHAR(255)、可变字符 (255)、NCHAR(55) NATIVE CHARACTER(70)、NVARCHAR(100)、TEXT 和 CLOB 被视为 TEXT。
而且 SQLite 不强制长度。
因此,我没有深入研究评论家文档,而是对列类型进行了一些试验。
我正在使用的数据库有超过 100 万条记录,大多数列为 NVARCHAR,因此在文件大小增量中很容易看到列数据类型的任何更改。
以下是我在努力减小数据库大小时发现的结果:
NVARCHAR: 最大的节省来自尽可能将列类型从 NVARCHAR 切换为普通 INT 或 FLOAT。在一个 80MB 的 DB 文件上,以兆字节为单位,非常明显。通过一些额外的重构,我将大小降低到 47MB。
NVARCHAR 与 VARCHAR: 差别很小,在 80MB 大小的数据库上可能只有几 KB
NVARCHAR 与其他字符串类型: 在各种基于字符串的类型之间切换几乎没有区别,因为文档指出所有字符串类型在 SQLite 中都以相同的方式存储,如 TEXT
INT 与其他数字 这里没有区别,SQLite 最后都存储为 NUMBER。
基于 NVARCHAR 列的索引也占用了更多 space,一旦在 INT 列上重新建立索引,我减少了一些 MB