核心方案: VACUUM

VACUUM 命令通过复制主数据库中的内容到一个临时数据库文件,然后清空主数据库,并从副本中重新载入原始的数据库文件。这消除了空闲页,把表中的数据排列为连续的,另外会清理数据库文件结构。

如果表中没有明确的整型主键(INTEGER PRIMARY KEY),VACUUM 命令可能会改变表中条目的行 ID(ROWID)。VACUUM 命令只适用于主数据库,附加的数据库文件是不可能使用 VACUUM 命令。

如果有一个活动的事务,VACUUM 命令就会失败。VACUUM 命令是一个用于内存数据库的任何操作。由于 VACUUM 命令从头开始重新创建数据库文件,所以 VACUUM 也可以用于修改许多数据库特定的配置参数。

DEMO:

1.已存在一个tetete.db库,大小为32k

创建一个表后,大小为40k

【sqlite3数据库,疑难杂症】sqlite3 删除大量数据后,db文件大小未变小问题_db文件大小

【sqlite3数据库,疑难杂症】sqlite3 删除大量数据后,db文件大小未变小问题_VACUUM_02

2.删除这个表,db文件大小仍为40k

【sqlite3数据库,疑难杂症】sqlite3 删除大量数据后,db文件大小未变小问题_sqlite3_03

【sqlite3数据库,疑难杂症】sqlite3 删除大量数据后,db文件大小未变小问题_主数据_04

3.输入VACUUM指令,db文件大小更新

【sqlite3数据库,疑难杂症】sqlite3 删除大量数据后,db文件大小未变小问题_数据_05

【sqlite3数据库,疑难杂症】sqlite3 删除大量数据后,db文件大小未变小问题_主数据_06

支持

欢迎关注公众号  谁吃薄荷糖,主要记录日常中觉得有意思的事情以及分享开发实践,保持深度和专注度,喜欢的点击右下角的再看哦。

【sqlite3数据库,疑难杂症】sqlite3 删除大量数据后,db文件大小未变小问题_sqlite3_07