SQLite 常见问题说明如下:
(12) 我删除了很多数据,但数据库文件并没有变小。这是一个错误吗?
不会。当您从 SQLite 数据库中删除信息时,未使用的磁盘空间会添加到内部“空闲列表”中,并在您下次插入数据时重新使用。磁盘空间不会丢失。但它也不会返回到操作系统。
您能否向我解释该决定背后的动机(与立即将可用空间返回给操作系统相反)?这种决定(包括不明显的)的利弊是什么?
正如 Phil 所写,从空闲列表中释放页面需要移动页面(并且调整对这些页面的所有引用)。
当数据被删除时,很可能会在之后插入一些其他数据,然后这些数据就可以使用空闲列表中的页面。将这些页面返回给操作系统只是为了在之后分配新页面效率低下,并且会增加碎片(磁盘上的数据库文件和数据库文件中的对象)。但是如果你真的想让 SQLite 做到这一点,你可以使用PRAGMA auto_vacuum.
在实际操作中,通常不会发生大量删除数据的情况,如果您知道删除后不会插入新数据,则可以VACUUM手动运行该命令。
| 归档时间: |
|
| 查看次数: |
2094 次 |
| 最近记录: |