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;