📜  SQLite-VACUUM

📅  最后修改于: 2021-01-04 05:09:36             🧑  作者: Mango


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

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

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

手动真空

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

$sqlite3 database_name "VACUUM;"

您可以从SQLite提示符运行VACUUM,如下所示-

sqlite> VACUUM;

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

sqlite> VACUUM table_name;

自动真空

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;"