从SQLite中的固定宽度列读取是否更快?

Dav*_*vid 7 database sqlite database-performance

从没有存储varchar或其他可变长度数据的表中读取通常会更快吗?在MySQL中,这更快,因为它可以准确计算磁盘上存储行的位置.

Dav*_*man 13

这个问题在SQLite的上下文中没有意义,因为它只支持单个TEXT字段类型.这里不存在"固定宽度"与"可变长度"的区别.

虽然SQLite允许您将字段定义为具有某种类型,但所有这些(最多)设置该字段对存储模糊数据时要使用的类型的偏好(例如,"3"是否将存储为INTEGER,REAL,或TEXT).您仍然可以在任何SQLite字段中存储任何类型的数据,无论其类型如何.

具体涉及CHAR与VARCHAR,http://www.sqlite.org/datatype3.html 告诉我们:

如果列的声明类型包含任何字符串"CHAR","CLOB"或"TEXT",则该列具有TEXT亲和性.请注意,VARCHAR类型包含字符串"CHAR",因此分配了TEXT亲和性.

  • 不,它不会.正如链接文档所解释的那样,SQLite使用动态字段类型.即使您将字段声明为INTEGER,您仍然可以在其中存储浮点数,文本甚至blob."INTEGER"声明为字段提供了将数据存储为整数的首选项,但并不限制它这样做.它仍然是一个可变宽度的列/记录.(这甚至忽略了INTEGER在SQLite中不是固定大小的细节......) (6认同)

lul*_*ala 5

由于SQLite仅使用可变长度记录,我猜他们在行碰巧具有相同长度时没有实现修复宽度查找优化.

正如Dave指出的那样,人们仍然可以在INT字段中存储文本.由于SQLite从不截断数据,这意味着SQLite允许看似固定的宽度列(如INT)来存储可变长度数据.因此,实现固定宽度查找优化是不可能的.