【SQLite】释放SQLite数据库的空闲空间
嗯,我是SQLite大白一只啦。
今天做SQLite写入数据提速测试,测试完了后删除了测试的数据,但是一瞥眼还是看到数据库文件的文件大小大的离谱。
于是我就想SQLite的数据库是不是不会自动缩小文件大小的 (因为我联想到某虚拟机分配虚拟硬盘大小时,虚拟硬盘文件只能扩容不能减小,用过的部分即在虚拟机中释放了但实际文件大小中依旧不变)
然后我在群中询问((⊙_⊙)为什么不去百度)
.....
....
许久,群中寂静万分…… (我难道单机了?!)
好吧,关键的时候还是要自己找资料啦。
- 首先我找到了这个:
SQLite数据库中删除数据后,文件大小没有变化发现了下面的这个语句,把自动VACUUM打开~ 嗯好像不错的样子
http://bbs.csdn.net/topics/390092795
PRAGMA auto_vacuum = 1;
操作 执行了一下这句,然后再执行了删除所有记录的语句。
结果 无果。体积未变。
- 接着我又看到了这个:
解决sqlite删除数据后,文件大小不变问题发现原来SQLite真有直接执行的VACUUM的命令:
http://blog.csdn.net/yangchun1213/article/details/7656146
VACUUM;
操作 执行这句。
结果 OK,体积缩小了。
总结
- PRAGMA auto_vacuum = 1; 只会在提交删除数据的事务时才生效;
- 如果要立即缩小数据库的体积,手动执行 VACUUM;
- “但是,auto-vacuum模式也会导致在数据库文件中产生更多的碎片。 并且,auto-vacuum模式也不能像 VACUUM命令那样压缩部分满的磁盘页。”
发表评论