Sqlite 简明教程

SQLite - VACUUM

VACUUM 命令通过将数据库内容复制到临时数据库文件并从副本重新加载原始数据库文件的方式来清理主数据库。这一操作消除了空页,使表数据平铺,并且以其他方式清理数据库文件结构。

VACUUM 命令可能会更改没有明确整数主键的表中条目的 ROWID。VACUUM 命令仅适用于主数据库。不能对附加数据库文件进行 VACUUM。

如果存在活动事务,那么 VACUUM 命令将失败。对于内存中数据库而言,VACUUM 命令是一个无操作符。由于 VACUUM 命令会从头重建数据库文件,所以 VACUUM 还可以用于修改许多特定于数据库的配置参数。

Manual VACUUM

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

$sqlite3 database_name "VACUUM;"

你可以这样从 SQLite 提示符运行 VACUUM:

sqlite> VACUUM;

还可以这样对特定表运行 VACUUM:

sqlite> VACUUM table_name;

Auto-VACCUM

SQLite 自动 VACUUM 和 VACUUM 不同,它只会将空页移动到数据库的末尾,从而减小数据库大小。这样一来,它会显著使数据库碎片化,而 VACUUM 确保对碎片进行整理。因此,自动 VACUUM 只是保持数据库较小。

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

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

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

$sqlite3 database_name "PRAGMA auto_vacuum;"