内部数据冗余发生在Microsoft Access中

时间:2014-07-11 03:14:52

标签: ms-access sql-update redundancy

我们正在使用ms access2010,我们不必要地增加50%的数据文件问题 每天。我们每天晚上都使用紧凑和修理过程。 但几乎每天,在白天,当这种巨大的增长发生和表现 受到严重影响我们必须再次手动运行此过程,之后这个巨大的尺寸差异消失了。我怀疑问题是因为在更新数据时Access引擎的内部行为。

任何人都可以在更新记录时向我解释在内部浪费了多少空间 数据库引擎? 例如,假设我们有一个100字节的记录,当我们以某种方式更新它并且大小减少到80时浪费的空间会是多少?这是20还是更多? 相反,当我们通过更新增加数据记录时,数据文件中的更新过程会创建任何浪费的空间吗?

任何有关如何提升表现的想法或建议都将受到赞赏。

1 个答案:

答案 0 :(得分:0)

您可以通过VBA运行C& R

Public Sub CompactDB() 
    CommandBars("Menu Bar").Controls("Tools").Controls("Database utilities").Controls("Compact and repair database...").accDoDefaultAction 
End Sub

数据库膨胀的原因(压缩只能解决其中一些问题 - 如果编码/使用宏,则其余部分需要进行反编译/重新编译)。

  1. MS Access是基于文件的,而不是基于服务器事务的,所以你是 始终为可变空间写入和重写硬盘驱动器。 要解决此问题,请使用MDSE切换到MS Access ADP文件, 您可以通过浏览从MS Office Professional CD安装 在CD上(不是安装向导的一部分),或者,挂钩 数据库直到服务器,例如SqlServer。你必须建立一个 ADP类型的新MS Access文档(与MDB相对)。这样做 然而,让你进入一个不同的发展体制,而不是你 过去,所以在做之前请先阅读。

  2. 编译。使用宏加上“后台编译”选项与通过使用MS Access附带的VB编辑器在Access Basic,Visual Basic for Access或Visual Basic中编码来编译MS Access项目没有什么不同。

  3. 无论你上次做出的任何更改都保留为已编译的伪代码,因此即使您只使用最新版本的代码,也可以将一个更改置于另一个更改之上。

    1. 查询,特别是大型查询,在运行时占用空间,直到压缩才会回收。您可以提高查询效率,但您永远不会完全放弃。

    2. ADODB上的Locktypes,cursortypes和cursorlocations,取决于你如何设置它们,如果你选择真正数据密集的组合,它会占用大量空间。这些可以以这样的方式编组(配置)以仅返回必要的内容。在microsoft.com上有关于MDSN库的知识库文章,详细说明了ADODB如何导致大量膨胀,并建议使用DAO,但这是一个警告;你所做的就是很好地使用ADODB,你就可以解决这个问题,DAO也不会消除臃肿。

    3. DAO功能。

    4. 对象创建 - 表格,表单,控件,报告 - 都占用空间。如果您创建表单并在以后删除它,则在您压缩之前不会回收表单的空间。

    5. 可爱的照片。这些总是占用空间,MS Access不会有效地存储它们。一旦存储在Access中,20K JPEG就像800K或1MB位图格式一样,在MS Access 97中无法做到这一点。您可以将图像放在表单上,​​并使用图像的子表单引用随时随地它,但你仍然没有绕过低效的存储格式。

    6. OLE对象。如果您有一个OLE字段并决定在该字段中插入电子表格,则可以使用整个Excel工作簿,而不仅仅是该工作表。小心如何使用OLE对象。

    7. 子表设置为[auto]的表属性。将所有表的此属性设置为[none]。根据您拥有的表数,性能也可以明显改善。

    8. 您还可以从Microsoft.com获取已损坏的数据库的Jet Compact实用程序。

      Source