解决SQLlite数据删除后占用空间不变的问题

2018-05-11  本文已影响0人  骑着蜗牛去攻城

解决方法:两种

一,在数据删除后,手动执行VACUUM命令,执行方式很简单

objSQLHelper.ExecuteNonQuery(CommandType.Text, "VACUUM")

VACUUM命令会清空“空闲列表”,把数据库尺寸压缩到最小。但是要耗费一些时间。

FQA里面说,在Linux的环境下,大约0.5秒/M。并且要使用两倍于数据库文件的空间。

使用Navicat 软件的话,则在打开命令界面,手工输入 VACUUM;

回车即可;

二,在数据库文件建成中,将auto_vacuum设置成“1”。

注意:只有在数据库中未建任何表时才能改变auto-vacuum标记。试图在已有表的情况下修改不会导致报错。

cmd.CommandText = "PRAGMA auto_vacuum = 1;"

cmd.ExecuteNonQuery()

当开启auto-vacuum,当提交一个从数据库中删除除数据的事物时,数据库文件自动收缩。

数据库会在内部存储一些信息以便支持这一功能,这使得数据库文件比不开启该选项时稍微大一些。

我的表结构,不含任何数据是,数据库文件大小是25K左右,开了auto_vacuum之后是26K。

插入运行基础数据后,文件变成35K,开了auto_vacuum之后是36K。

变化不大,无所谓。

上一篇下一篇

猜你喜欢

热点阅读