SQLite--Vacuum命令(释放空间)
来源:互联网 发布:linux udp 端口 编辑:程序博客网 时间:2024/05/05 09:08
前言
有些朋友可能会有这种疑惑,为什么明明删除了许多数据,数据库文件的大小却没有变化,这是因为从Sqlite删除数据后,未使用的磁盘空间被添加到一个内在的”空闲列表”中用于存储你下次插入的数据。磁盘空间并没有丢失。但是也不向操作系统返回磁盘空间。
既然知道原因,当然也有解决方法,就是现在要讲的Vacuum命令。
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;
Auto-VACUUM
SQLite 的 Auto-VACUUM 与 VACUUM 不大一样,它只是把空闲页移到数据库末尾,从而减小数据库大小。
但只会从数据库文件中截断空闲列表中的页, 而不会回收数据库中的碎片,也不会像VACUUM 命令那样重新整理数据库内容。实际上,由于需要在数据库文件中移动页, auto-vacuum 会产生更多的碎片。而且,在执行删除操作的时候,也有那个.db-journal文件产生。
要使用auto-vacuum,需要一些前题条件。 数据库中需要存储一些额外的信息以记录它所跟踪的每个数据库页都找回其指针位置。 所以,auto-vacumm 必须在建表之前就开启。在一个表创建之后, 就不能再开启或关闭 auto-vacumm。
从命令提示符中运行下面的命令来检查 auto-vacuum 设置:
sqlite3 database_name "PRAGMA auto_vacuum";
在 SQLite 提示符中,您可以通过下面的编译运行,启用/禁用 SQLite 的 Auto-VACUUM:
sqlite> PRAGMA auto_vacuum = NONE; -- 0 means disable auto vacuumsqlite> PRAGMA auto_vacuum = INCREMENTAL; -- 1 means enable incremental vacuumsqlite> PRAGMA auto_vacuum = FULL; -- 2 means enable full auto vacuum
要想了解 PRAMA 命令的使用和功能,可以看看我的另一篇博客SQLite的PRAGMA命令。
结束语:本文仅用来学习记录,参考查阅。
- SQLite--Vacuum命令(释放空间)
- SQLite---VACUUM命令分析
- SQLite的VACUUM命令
- SQLite VACUUM命令分析
- sqlite 优化 之 ANALYZE 与 VACUUM 命令
- SQLite入门与分析(九)---VACUUM命令分析
- sql中 vacuum命令:回收空白空间,减少数据库大小
- SQLite语法 VACUUM
- sqlite文件大小问题 VACUUM
- SQLite VACUUM/真空(sqlite 文件压缩)
- 使用 VACUUM 命令减小数据库大小
- 第二章 SQL命令参考- VACUUM
- 解决sqlite删除数据后,文件大小不变问题(VACUUM)
- 指针分配和释放空间(转)
- 释放数组占用空间
- 释放UNDO表空间
- oracle Move空间释放
- c#---释放空间
- 逻辑卷管理器LVM建立
- Java静态与非静态代码块
- 机器学习:Softmax回归
- sklearn中的svm参数介绍
- Struts2的工作原理详解
- SQLite--Vacuum命令(释放空间)
- Labview 串口通信
- 类与对象试验1
- 浅谈Runnable与Callable的区别
- descendantFocusability 的用法和理解+fitSystemWindow的使用
- webStrom中的批量替换
- 浏览器缓存机制
- JSP开发常见问题
- RxJava开发文档