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

时间:2010-12-14 10:45:21

标签: database sqlite database-performance

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

2 个答案:

答案 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这样看似固定的宽度列来存储可变长度数据。因此无法实现固定宽度的查找优化。