我有一个test.db
和sqlite3
数据库。 auto_vacuum=incremental
,但是,当我删除大量数据库后调用PRAGMA incremental_vacuum(1000)
时,incremental_vacuum
仅删除了一页-4096B or 4K
的大小,我不知道为什么它做到了。
要删除的页面数量是否有上限?
是否存在我不知道必须更改的compile_option
?
欢迎所有想法。
答案 0 :(得分:0)
您应该尝试使用VACUUM命令,这将重建数据库,并删除已删除的数据。
使用PRAGMA incremental_vacuum(1000)
仅释放空闲列表中的页面(您可以使用PRAGMA freelist_count
获取空闲列表中的页面数)。
答案 1 :(得分:0)
您没有提到如何访问SQLite数据库。可能的原因之一可能是您的代码使用了sqlite3_step API(直接或间接通过某些包装库间接使用)API,该API每步可以清除一页。
如果是这种情况,则需要循环直到sqlite3_step()返回SQLITE_DONE(而不是SQLITE_ROW),或者切换到使用sqlite3_exec包装器。