压缩Sqlite数据文件大小,解决数据删除后占用空间不变的问题

本文探讨了Sqlite数据库在删除大量数据后文件大小不变的问题,原因是删除的数据空间并未归还给操作系统,而是留在了Sqlite的空闲列表中。解决方案包括手动执行VACUUM命令或设置auto_vacuum参数为1。手动VACUUM会压缩文件,但可能需要一定时间,而auto_vacuum则在每次删除操作后自动收缩文件。这两个方法都在实际项目中得到了应用。
摘要由CSDN通过智能技术生成

最近有一网站使用Sqlite数据库作为数据临时性的缓存,对多片区进行划分Sqlite数据库文件,每天大概新增近1万的数据量,起初效率有明显的提高,但历经一个多月后数据库文件从几K也上升到了近160M,数据量也达到了40多万条,平均每一条数据占用了 4K的空间,虽然使用上的效率直观上没有造成太大的影响,但服务器的占用内存却比原来多占用了20%左右。今天刚好打算清除一个Sqlite的冗余数据,将保留最近10天的数据就可以了,结果执行了删除指令delete后删除30多万条数据保留了10多万数据,却发现Sqlite数据库文件占用空间的大小一点没有少,这是为什么呢?


原因是:

当你从Sqlite删除数据后,未使用的磁盘空间被添加到一个内在的空闲列表中用于存储你下次插入的数据。磁盘空间并没有丢失。但是也不向操作系统返回磁盘空间。(嘿嘿,Sqlite.orgFAQ

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值