7

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

4

2 回答 2

15

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

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

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

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

于 2010-12-14T12:01:41.710 回答
5

由于SQLite 仅使用可变长度记录,我猜想当行恰好具有相同长度时,它们没有实现固定宽度查找优化。

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

于 2013-02-25T01:49:07.977 回答