【SQLite】释放SQLite数据库的空闲空间

作者:一年又一年 分类: 有姿势的东西 发布于:2014-8-22 22:28 ė2298次浏览 60条评论

嗯,我是SQLite大白一只啦。 

今天做SQLite写入数据提速测试,测试完了后删除了测试的数据,但是一瞥眼还是看到数据库文件的文件大小大的离谱。 

于是我就想SQLite的数据库是不是不会自动缩小文件大小的 (因为我联想到某虚拟机分配虚拟硬盘大小时,虚拟硬盘文件只能扩容不能减小,用过的部分即在虚拟机中释放了但实际文件大小中依旧不变)

然后我在群中询问((⊙_⊙)为什么不去百度)

.....

....

许久,群中寂静万分…… (我难道单机了?!)

好吧,关键的时候还是要自己找资料啦。
  • 首先我找到了这个:
SQLite数据库中删除数据后,文件大小没有变化
http://bbs.csdn.net/topics/390092795
 
发现了下面的这个语句,把自动VACUUM打开~ 嗯好像不错的样子
PRAGMA auto_vacuum = 1;

 操作  执行了一下这句,然后再执行了删除所有记录的语句。

 结果  无果。体积未变。

  • 接着我又看到了这个:
解决sqlite删除数据后,文件大小不变问题
http://blog.csdn.net/yangchun1213/article/details/7656146
发现原来SQLite真有直接执行的VACUUM的命令:
VACUUM;

 操作  执行这句。

 结果  OK,体积缩小了。

总结
  • PRAGMA auto_vacuum = 1; 只会在提交删除数据的事务时才生效;
  • 如果要立即缩小数据库的体积,手动执行 VACUUM;
  •  “但是,auto-vacuum模式也会导致在数据库文件中产生更多的碎片。 并且,auto-vacuum模式也不能像 VACUUM命令那样压缩部分满的磁盘页。”

本文出自 一年又一年的点滴记忆博客,转载时请注明出处及相应链接。

发表评论

电子邮件地址不会被公开。必填项已用*标注

Ɣ回顶部