SQLite vacuum


VACUUM命令通过将主数据库的内容复制到临时数据库文件并从副本中重新加载原始数据库文件来清理主数据库。这样可以消除空闲页面,将表数据对齐为连续数据,否则可以清理数据库文件结构。

VACUUM命令可能会更改没有显式INTEGER PRIMARY KEY的表中条目的ROWID。 VACUUM命令仅在主数据库上有效。无法VACUUM附加的数据库文件。

如果存在活动事务,VACUUM命令将失败。 VACUUM命令对于内存数据库是无操作的。当VACUUM命令从头开始重建数据库文件时,VACUUM也可以用于修改许多特定于数据库的配置参数。

手动VACCUM


以下是从命令提示符对整个数据库发出VACUUM命令的简单语法:

$sqlite3 database_name "VACUUM;"

你可以从SQLite提示符运行VACUUM,如下所示:

sqlite> VACUUM;

你还可以在特定表上运行VACUUM,如下所示:

sqlite> VACUUM table_name;

自动VACCUM


SQLite Auto-VACUUM与VACUUM的功能不同,它仅将可用页移动到数据库的末尾,从而减小了数据库的大小。这样,它可以极大地使数据库碎片化,而VACUUM确保碎片整理。因此,Auto-VACUUM只会使数据库变小。

你可以通过在SQLite提示符下运行的以下编译指示来启用/禁用SQLite自动清理:

sqlite> PRAGMA auto_vacuum = NONE; -- 0 means disable auto vacuum
sqlite> PRAGMA auto_vacuum = FULL; -- 1 means enable full auto vacuum
sqlite> PRAGMA auto_vacuum = INCREMENTAL; -- 2 means enable incremental vacuum

你可以从命令提示符处运行以下命令来检查自动真空设置:

$sqlite3 database_name "PRAGMA auto_vacuum;"