为什么我的Firebird数据库对于它所拥有的数据量如此巨大?

Mas*_*ler 7 database performance firebird database-design

我最近一直在玩数据库编程,我注意到有点令人担忧的事情.

我拿了一个以专有的非压缩格式保存的二进制平面文件,它保存了几种不同类型的记录,构建了表示相同记录的模式,并将数据上传到Firebird数据库.原始的平面文件大约是7 MB.数据库超过70 MB!

我可以理解,描述表本身有一些开销,而且我在各种表上都有一些最小的索引(主要是PK)和FK,所有这些都占用了一些空间,但似乎只有10倍有点荒谬.有没有人对这个数据库如此糟糕的东西有什么想法,以及如何将尺寸缩小?

Noe*_*oel 1

来自火鸟常见问题解答

许多用户想知道为什么从数据库中删除大量记录后无法恢复磁盘空间。

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

如果磁盘空间对您来说很重要,您可以通过备份然后恢复来恢复空间。由于您正在执行备份以立即恢复,因此明智的做法是使用“禁止垃圾收集”或“不使用垃圾收集”开关(isql 中的 -G),这将使备份速度更快。垃圾收集用于清理数据库,并且由于它是一项维护任务,因此通常与备份一起完成(因为备份无论如何都必须遍历整个数据库)。但是,您很快就会放弃该数据库文件,并且无需清理它。