aLoNe IT Develop Studio

  • 首页
  • IT前沿
  • Web技术
  • 小姿势
  • 运维管理
  • 随笔
欢迎来到aLoNe.Adams.K的个人博客
  1. 首页
  2. 小姿势
  3. 正文

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

2017年3月30日 8710点热度 3人点赞 0条评论

估计有人在使用sqlite数据库时,会有这种情况,删除数据库里面的一些数据后,却发现Sqlite数据库文件占用空间的大小一点没有少,这是为什么呢?

原因:

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

解决方法:

1.手动执行VACUUM命令

2.自动VACUUM

下面是VACUUM命令的详细说明

SQLite Vacuum

VACUUM 命令通过复制主数据库中的内容到一个临时数据库文件,然后清空主数据库,并从副本中重新载入原始的数据库文件。这消除了空闲页,把表中的数据排列为连续的,另外会清理数据库文件结构。

如果表中没有明确的整型主键(INTEGER PRIMARY KEY),VACUUM 命令可能会改变表中条目的行 ID(ROWID)。VACUUM 命令只适用于主数据库,附加的数据库文件是不可能使用 VACUUM 命令。

如果有一个活动的事务,VACUUM 命令就会失败。VACUUM 命令是一个用于内存数据库的任何操作。由于 VACUUM 命令从头开始重新创建数据库文件,所以 VACUUM 也可以用于修改许多数据库特定的配置参数。

手动 VACUUM

下面是在命令提示符中对整个数据库发出 VACUUM 命令的语法:

$sqlite3 database_name "VACUUM;"

您也可以在 SQLite 提示符中运行 VACUUM,如下所示:

sqlite> VACUUM;

您也可以在特定的表上运行 VACUUM,如下所示:

sqlite> VACUUM table_name;

自动 VACCUM(Auto-VACUUM)

SQLite 的 Auto-VACUUM 与 VACUUM 不大一样,它只是把空闲页移到数据库末尾,从而减小数据库大小。通过这样做,它可以明显地把数据库碎片化,而 VACUUM 则是反碎片化。所以 Auto-VACUUM 只会让数据库更小。

在 SQLite 提示符中,您可以通过下面的编译运行,启用/禁用 SQLite 的 Auto-VACUUM:

sqlite> PRAGMA auto_vacuum = NONE; -- 0 means disable auto vacuum

sqlite> PRAGMA auto_vacuum = INCREMENTAL; -- 1 means enable incremental vacuum

sqlite> PRAGMA auto_vacuum = FULL; -- 2 means enable full auto vacuum

您可以从命令提示符中运行下面的命令来检查 auto-vacuum 设置:

$sqlite3 database_name "PRAGMA auto_vacuum;"

转载请注明:Li Jianwei's Blog » 压缩Sqlite数据文件大小,解决数据删除后占用空间不变的问题

标签: sqlite
最后更新:2017年3月30日

aLoNe.Adams.K

一只胖菜鸟!

点赞
< 上一篇
下一篇 >

文章评论

razz evil exclaim smile redface biggrin eek confused idea lol mad twisted rolleyes wink cool arrow neutral cry mrgreen drooling persevering
取消回复
文章分类
  • IT前沿 / 3篇
  • Web技术 / 2篇
  • 小姿势 / 28篇
  • 运维管理 / 5篇
  • 随笔 / 3篇
标签聚合
sqlite 反向代理 CentOS Yum Orange Pi google 虚表 debian
最新 热点 随机
最新 热点 随机
VSCode插件推荐 Docker内创建SQLServer服务 Cli模式下ThinkPHP框架Redis对象反序列化异常问题解决方案 Docker: Error response from daemon: Ports are not available 端口没被占用,却显示被占用 团队开发规范培训(代码管理篇) 团队开发规范培训(序)
Cli模式下ThinkPHP框架Redis对象反序列化异常问题解决方案Docker内创建SQLServer服务VSCode插件推荐
常见颜色深度的 bitmap 之间的相互转换 虚表!高性能网络传输数据结构,替代Json的好帮手! 解决PostMessage发送字符串造成数据错乱问题 Thinkphp5开发中的坑及解决方案! Windows平台分布式架构实践 - 负载均衡 Git下获取更新文件方法
友情连接
  • 李建伟博客
  • 不忘初心的简书
归档
  • 2023年7月 / 3篇
  • 2023年6月 / 1篇
  • 2022年12月 / 5篇
  • 2022年6月 / 1篇
  • 2022年2月 / 3篇
  • 2020年11月 / 1篇
  • 2018年12月 / 1篇
  • 2018年5月 / 1篇
  • 2018年3月 / 1篇
  • 2017年11月 / 1篇
  • 2017年8月 / 1篇
  • 2017年3月 / 2篇
  • 2017年1月 / 1篇
  • 2016年9月 / 16篇

COPYRIGHT © 2022 aLoNe IT Develop Studio. ALL RIGHTS RESERVED.

Theme Kratos Made By Seaton Jiang

陕ICP备19021656号-2