真空数据库是什么意思?

An̲*_*rew 26 database terminology vacuum

正如这个Firefox bug所引用的那样,真空吸尘数据库的行为是什么?所有现代数据库软件或仅某些数据库软件是否支持此操作?

edg*_*eis 35

使用MVCC将事务彼此隔离的数据库需要定期扫描表以删除过时的行副本.在MVCC中,当更新或删除行时,不能立即回收它,因为可能存在仍然可以看到该行的旧版本的活动事务.而不是检查是否是这种情况,这可能是相当昂贵的,旧行被认为保持相关性.回收空间的过程被推迟到表被抽真空,这取决于数据库,可以自动或明确地启动.


Min*_*ker 6

它特指SQL Lite vacuum命令. http://www.sqlite.org/lang_vacuum.html

它正在删除DELETE语句遗留的空间.

  • 和UPDATE语句. (2认同)

小智 5

真空意味着两件事:

  1. 回收空间
  2. 碎片整理文件[种类]

为什么使用真空:

  1. 当您删除表、视图、索引和触发器等数据库对象或从表中删除数据时,数据库文件的大小总是会增加,因为 SQLite 只是将删除的对象标记为空闲并保留以供将来使用。

  2. 索引和表变得碎片化,伴随着大量的插入、更新和删除。

  3. 未使用的数据块是由插入、更新和删除操作创建的。

防范措施: 不同的数据库可能会以不同的方式处理此问题:例如,在 SQLite 中,如果您使用非别名 rowid,VACUUM 命令将重置 rowid 值。但如果您使用 INTEGER PRIMARY KEY 列,则 VACUUM 不会更改该列的值。

Vacuum 需要空间来复制数据库并运行操作。