删除多条记录后,如何优化表格

时间:2009-11-02 16:57:29

标签: sql firebird

我从表中删除了很多记录但是DB大小(Firebird)保持不变。我该如何减少它?

我在PostgreS中寻找类似于真空的东西。

3 个答案:

答案 0 :(得分:2)

这是火鸟的众多痛苦之一。 最好也是唯一有效且正确的方法 - 使用gbak

备份/恢复数据库

答案 1 :(得分:1)

Firebird偶尔会进行扫描以从索引等中删除记录,并重新获得其他用途的空间。换句话说,只要扫描运行,您将具有与数据库文件较小时相同的性能。如果您正在尝试这样做,则可以强制执行立即扫描。

但是,实际数据库的大小不会缩小,除非您进行备份和还原。如果大小有问题,请对gbak使用-USE_ALL_SPACE参数,它将阻止为将来的记录保留该空间,这将产生一个较小的数据库。

答案 2 :(得分:0)

来自official faq

  

许多用户想知道为什么他们没有获得磁盘空间   从数据库中删除大量记录。

     

原因是这是一项昂贵的操作,它需要一个   大量的磁盘写入和内存 - 就像进行重新分段一样   硬盘分区。使用的数据库(页面)部分   此类数据标记为空,Firebird下次将重复使用它们   它需要写新数据。

     

如果磁盘空间对您来说至关重要,您可以获取空间   做备份然后恢复。因为你正在做备份   立即恢复,使用“抑制垃圾收集”是明智的   或“不要使用垃圾收集”开关(-G在gbak中),这将使   备份变得更快。垃圾收集用于清理你的垃圾   数据库,因为它是一项维护任务,它通常是一起完成的   备份(因为备份必须通过整个数据库)。   但是,你很快就会放弃那个数据库文件,而且没有   需要清理它。