假设我有一个表,这是一个参考表(该表仅供参考,未更新)。
例如,表架构:
CREATE TABLE countries(
zip_code INTEGER PRIMARY KEY,
name TEXT)
我想提高数据的检索速度。现在,我在index
列上使用了name
,但我希望更进一步......
更改表架构:
CREATE TABLE countries(
zip_code INT PRIMARY KEY,
name CHAR(200))
重新定义我修改了列的数据类型,以便为每列指定固定大小,因此整行的大小固定。
这是正确的假设吗?认为固定大小的行可以比SQLite DBMS 中的动态大小行更快地检索。
我从其他DBMS(MySQL)中获得灵感,它比动态大小行更快地检索静态大小行
答案 0 :(得分:3)
我正在修复这个与SQLite相关的答案。它被接受了,所以我不能删除它。
我不认为为每个名称存储200个字节会加快查询速度。在大多数数据库中,它所做的只是将您存储的数据量相乘 - 因为名称较短。在SQLite中,它是一个无操作。 SQLite将所有字符串存储为文本;它没有像其他数据库一样用空格填充值。
我并不熟悉SQLite的内部。但数据库(包括SQLite)将记录存储在数据页上。这些由缓存机制管理。索引通过它所在的页面识别记录。读入整个数据页。
在大多数数据库中,将列声明为name(200)
可能会浪费大量空间。它会增加记录的大小,并具有以下效果:
在SQLite中,这都不适用,因为SQLite只是忽略了长度,并且没有用空格填充值。
在大多数数据库中,您想要做的并不是一个好主意,它在SQLite中没有任何效果。我建议避免这种方法。指数应该足够了。