SQLite Vacuum
SQLite VACUUM 用于消除 SQLite 的空白页,把表中的数据排列为连续的,还会清理数据库文件结构
VACUUM 命令通过复制主数据库中的内容到一个临时数据库文件,然后清空主数据库,并从副本中重新载入原始的数据库文件
如果表中没有明确的整型主键 ( INTEGER PRIMARY KEY),VACUUM 命令可能会改变表中条目的行 ID ( ROWID )
如果有一个活动的事务,VACUUM 命令就会失败
VACUUM 命令是一个用于内存数据库的任何操作
由于 VACUUM 命令从头开始重新创建数据库文件,所以 VACUUM 也可以用于修改许多数据库特定的配置参数。
VACUUM 命令只适用于主数据库,附加的数据库文件是不可能使用 VACUUM 命令
手动 VACUUM
下面的 shell 命令用于向数据库 database_name 发出 VACUUM 命令
sqlite3 database_name "VACUUM;"
也可以在 SQLite 提示符中运行 VACUUM
VACUUM;
还可在特定的表 tablename 上运行 VACUUM 命令
VACUUM tablename;
查看当前某个数据库的 auto-vacuum 设置
可以使用下面的 shell 命令查看数据库 database_name auto-vacuum 启用情况
sqlite3 database_name "PRAGMA auto_vacuum;"
自动 VACUUM ( Auto-VACUUM )
与手动 VACUUM 不同,自动 VACUUM ( Auto-VACUUM ) 只把空闲页移到数据库末尾,从而减小数据库大小
我们可以在 SQLite 提示符中,使用 Pragma 命令 启用或禁用 Auto-VACUUM
比如禁用 Auto-VACUUM
sqlite> PRAGMA auto_vacuum = NONE;
比如启用 Auto-VACUUM 允许数据库文件随着数据从数据库移除而缩小
sqlite> PRAGMA auto_vacuum = INCREMENTAL; -- 1 means enable incremental vacuum
启用完全的 Auto-VACUUM
sqlite> PRAGMA auto_vacuum = FULL;