You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何带WITHOUT ROWID的SQLite数据库体积大440%?

WITHOUT ROWID表的存储与性能异常现象

我创建了如下表:

CREATE TABLE IF NOT EXISTS image_table
("name" TEXT PRIMARY KEY, "data" BLOB) WITHOUT ROWID;

并准备了插入SQL语句:

INSERT INTO image_table (name, data) VALUES (?1, ?2);

执行的插入操作:

  • 将1000字节的BLOB绑定到参数?2,将"name"+序号(如name1、name2等)绑定到?1作为主键
  • 循环执行100000次插入,主键名称大小约5-10字节可忽略,总数据量约100MB(100000*1000字节)

遇到的异常情况:

  • 使用WITHOUT ROWID时,最终数据库文件大小为444MB;不使用该选项时仅约100MB
  • 执行VACUUM命令后,WITHOUT ROWID表的数据库大小仅降至338MB
  • 原本预期WITHOUT ROWID能通过消除冗余索引提升效率,这个巨大差异是在他人无法复现我的结果时偶然发现的

补充说明:

  • 使用WITHOUT ROWID会导致插入速度慢一倍,我打算不再使用该选项
  • 若将BLOB大小改为10字节,WITHOUT ROWID表的插入速度与普通表相当,且文件体积仅为普通表的一半,这一现象令人困惑

内容的提问来源于stack exchange,提问作者Zebrafish

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.16 10:22:40