【问题标题】:A BLOB which isn't present in a SQLite SELECT statement can affect performance?SQLite SELECT 语句中不存在的 BLOB 会影响性能吗?
【发布时间】:2013-06-20 00:03:28
【问题描述】:

我们在 SQLite3 数据库中有一个类似这样的表:

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

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

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

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

【问题讨论】:

  • 你可以简单地尝试......

标签: sqlite database-performance


【解决方案1】:

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

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

【讨论】:

  • 即使 BLOB 是最后一个字段?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-04-15
  • 2020-03-15
  • 2011-04-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多