且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

解决sqlite删除数据后,文件大小不变问题(VACUUM)

更新时间:2022-08-13 09:58:55

删除表格的全部数据:


DELETE FROM [Name]


当在sqlite中删除了大量数据后,数据库文件的大小还是那样,没有变。原因是:从Sqlite删除数据后,未使用的磁盘空间被添加到一个内在的”空闲列表”中用于存储你下次插入的数据。磁盘空间并没有丢失。但是也不向操作系统返回磁盘空间。


解决方法有以下两种:

1,在数据删除后,手动执行SQL"VACUUM"命令,执行方式很简单。推荐使用。

2,在数据库文件建成中,将auto_vacuum设置成“1”。但是第二个方法同样有缺点,只会从数据库文件中截断空闲列表中的页, 而不会回收数据库中的碎片,也不会像VACUUM 命令那样重新整理数据库内容。实际上,由于需要在数据库文件中移动页, auto-vacuum 会产生更多的碎片。而且,在执行删除操作的时候,也有那个.db-journal文件产生。要使用 auto-vacuum,需要一些前题条件。 数据库中需要存储一些额外的信息以记录它所跟踪的每个数据库页都找回其指针位置。 所以,auto-vacumm 必须在建表之前就开启。在一个表创建之后, 就不能再开启或关闭 auto-vacumm。