4

我们分发使用 MS Access .mdb 文件的应用程序。有人注意到,在 MS Access 中打开文件后,文件大小缩小了很多。这表明该文件是一个很好的压缩候选者,但我们没有为我们的用户提供这样做的方法。

所以,我的问题是,这重要吗?我们在乎吗?如果我们的用户从不压缩数据库,会发生什么坏事?

4

9 回答 9

12

除了使您的数据库更小外,它还会重新计算表上的索引并对表进行碎片整理,从而加快访问速度。它还会发现任何不应该在您的数据库中发生但可能由于 Access 中的错误或崩溃而发生的不一致。

不过,这并非完全没有风险——Access 2007 中的一个错误有时会在此过程中删除您的数据库。

所以这通常是一件好事,但要搭配一个好的备份程序。备份到位后,您还可以从任何“不可恢复”的压缩包中恢复,并以最少的数据丢失修复问题。

于 2008-09-16T16:58:40.930 回答
5

确保您定期压缩和修复数据库,尤其是在数据库应用程序经常遇到记录更新、删除和插入的情况下。这不仅可以将数据库文件的大小保持在最低限度——这将有助于加快数据库操作和网络通信——它还可以执行数据库内务管理,这对数据的稳定性有更大的好处。但在压缩数据库之前,请确保备份文件,以防压缩出现问题。

Jet 压缩数据库以重新组织文件中的内容,以便为数据、表或索引分配的每个 4 KB“页面”(Access 95/97 为 2KB)空间位于连续区域中。Jet 从标记为已删除的记录中恢复空间,并按照主键顺序重写每个表中的记录,就像聚集索引一样。这将使您的数据库的读/写操作更快。

Jet 还在压缩期间更新表统计信息。这包括识别每个表中的记录数,这将允许 Jet 使用最优化的方法来扫描记录,无论是通过使用索引还是在记录很少时使用全表扫描。压缩后,运行每个存储的查询,以便 Jet 使用这些更新的表统计信息重新优化它,这可以提高查询性能。

如果需要,Access 2000、2002、2003 和 2007 会将压缩与修复操作结合起来。修复过程:

1 - 清理不完整的交易

2 - 将系统表中的数据与实际表中的数据、查询和索引中的数据进行比较并修复错误

3 - 修复非常简单的数据结构错误,例如丢失指向多页记录的指针(这并不总是成功,这就是为什么“修复”并不总是能够保存损坏的 Access 数据库的原因)

4 - 替换有关 VBA 项目结构的缺失信息

5 - 替换打开表单、报告和模块所需的缺失信息

6 - 修复表单、报告和模块中的简单对象结构错误

如果用户从不压缩/修复数据库,可能会发生的坏事是它会由于膨胀而变慢,并且可能变得不稳定 - 意味着损坏。

于 2008-09-16T17:54:03.713 回答
4

压缩 Access 数据库(也称为 MS JET 数据库)有点像对硬盘进行碎片整理。访问(或者更准确地说,MS JET 数据库引擎)在重复使用空间方面不是很好 - 因此,当更新、插入或删除记录时,空间并不总是被回收 - 相反,新空间被添加到数据库文件的末尾并改为使用。

一般的经验法则是,如果您的 [Access] 数据库将被写入(更新、更改或添加到),您应该允许压缩 - 否则它的大小增长(不仅仅是您添加的数据, 也)。

因此,要回答您的问题:

  • 是的,这很重要(除非您的数据库是只读的)。
  • 您应该关心(除非您关心用户的磁盘空间)。
  • 如果您不压缩 Access 数据库,随着时间的推移,它会变得比其中的数据所显示的要大得多,从而降低性能并增加错误和损坏的可能性。(作为基于文件的数据库,Access 数据库文件因损坏而臭名昭著,尤其是在通过网络访问时。)

如果您决定将此功能添加到您的应用程序,这篇关于如何通过 ADO 压缩 Microsoft Access 数据库的文章将为您提供一个很好的起点。

于 2008-09-16T17:24:59.010 回答
1

我会为用户提供一种压缩数据库的方法。当压缩将减少到 60-80 时,我已经看到数据库增长到 600 多兆字节。

于 2008-09-16T16:58:36.577 回答
1

呼应 Nate:在旧版本中,我的数据库已经损坏 - 所以一个好的备份机制是必不可少的。我不会在您的应用程序中编写任何代码来自动执行此操作。但是,如果客户发现他们的数据库运行速度非常慢,您的技术支持人员可以在需要时与他们讨论(当然需要适当的备份)。

如果他们的数据库变得如此之大以至于压缩开始成为必需品,那么也许是时候转向 MS-SQL 了。

于 2008-09-16T17:40:13.653 回答
0

我发现 Access 数据库文件几乎总是随着时间的推移而损坏。压缩和修复它们有助于将其推迟一段时间。

于 2008-09-16T16:57:53.477 回答
0

好吧,这真的很重要!每次操作数据时,mdb 文件的大小都会不断增加,直到达到无法承受的大小。但是您不必通过界面提供压缩方法。您可以在 mdb 文件中添加以下代码,以便在每次关闭文件时对其进行压缩:

Application.SetOption(“自动压缩”),1

于 2008-09-16T17:26:45.607 回答
0

我还强烈建议为您的应用程序查看 VistaDB ( http://www.vistadb.net/ ) 或 SQL Compact ( http://www.microsoft.com/sql/editions/compact/ )。这些可能不适合您的应用程序......但绝对值得一看。

于 2008-09-16T17:36:10.480 回答
-1

如果您不为您的用户提供一种解压缩方式并且原始大小不是问题,那么请不要打扰。

于 2008-09-16T16:56:06.037 回答