从没有存储varchar或其他可变长度数据的表中读取通常会更快吗?在MySQL中,这更快,因为它可以准确计算磁盘上存储行的位置。
答案 0 :(得分:13)
这个问题在SQLite的上下文中没有意义,因为它只支持单个TEXT
字段类型。这里不存在“固定宽度”与“可变长度”的区别。
虽然SQLite允许您将字段定义为具有某种类型,但所有这一切(最多)设置该字段对存储模糊数据时要使用的类型的偏好(例如,“3”是否将存储为INTEGER ,REAL或TEXT)。您仍然可以在任何SQLite字段中存储任何类型的数据,无论其类型如何。
具体涉及CHAR与VARCHAR,http://www.sqlite.org/datatype3.html告诉我们:
如果声明了列的类型 包含任何字符串“CHAR”, 然后该列具有“CLOB”或“TEXT” TEXT亲和力。请注意该类型 VARCHAR包含字符串“CHAR”和 因此被分配了TEXT亲和力。
答案 1 :(得分:5)
仅限SQLite uses variable-length records,我猜他们在行恰好具有相同的长度时没有实现修复宽度查找优化。
正如Dave指出的那样,人们仍然可以在INT字段中存储文本。从SQLite never truncates data开始,这意味着SQLite允许像INT这样看似固定的宽度列来存储可变长度数据。因此无法实现固定宽度的查找优化。