0

我们在 SQLite3 数据库中有一个表,如下所示:

Create Table Images (ID PRIMARY KEY, Height INTEGER, Width INTEGER, FileName TEXT, Thumb BLOB)

拇指相当小(@ 20kb),表基数约为 100,000-200,000 行。

SELECT ID, FILENAME FROM IMAGES如果我们在表中有 BLOB 并且如果我们将 BLOB 移动到另一个具有 Images.ID 外键的表中,那么相同的查询 ( ) 之间存在显着的速度差异?请注意,查询中不存在该字段。

IOW,即使查询中不存在所述字段,表中是否存在 BLOB 字段也会显着影响性能?

4

1 回答 1

2

Blob 数据与表中每条记录中的其他列一起存储。因此,如果您的查询需要访问多条记录,则必须从磁盘读取所有数据,即使实际上只有一些列返回给应用程序。

对于默认的 4 KB 页面大小,大于 4061 字节的记录使用溢出页面存储,并且这些页面仅按需加载。因此,如果 blob 列和它之后的任何列都没有被使用,则不会访问溢出页面。但是,至少一条记录的前 489 字节总是存储在表的 B-tree 页中,因此如果记录中的其他值不需要太多空间,则表页中的大部分空间仍然被 blob 占用数据。

于 2013-06-24T08:23:46.207 回答