我开发了一个 Access 2010 数据库。
它有三个主要的表:
HOUSES
id,
address,
number_stories,
garden,
parking,
imageAttachments (~1-4 per record),
etc...,
about 60 fields total
CONTACTS
id,
houses.id(fk),
contactType(owner, manager, etc),
contactEmail,
contactPhone
VISITS
id,
Contacts.id(fk),
Houses.id(fk),
visitDate,
visitNotes
它还有一堆用于房屋表中某些字段的小型查找表。
现在,我列出了大约 100 间房屋,只有大约 5-10 次联系和访问。
我预计在其高峰期,该数据库将包含 300-500 间房屋,每间房屋有 3-5 个联系人和访问。
现在数据库大小约为 50 MB。我意识到我在构建它或最初填充它时没有压缩/修复它,这可能是一个问题。它似乎运行得很慢。这个数据库增长太多了吗?这是此范围数据库的典型大小吗?
(我在带有 8 gig RAM 的 Windows 7 上,所以我认为我自己的电脑不是问题)
我有 1.5 GB 的 Access 数据库(7 年前在一台比您描述的要弱得多的机器上)运行良好 - 对于某些查询。这实际上取决于您要查询的内容以及索引的方式。在不知道您正在运行的查询和报告的详细信息的情况下,我不能说它是否太慢(而且您实际上并没有定义慢:10 秒?2 秒?3 小时?)。我过去知道 Access 有 2GB 的文件大小限制。我不知道最近的版本是否改变了这一点。
50MB 非常小。我现在不会担心大小。如果您在数据库中进行大量编码、更新表单设计、创建新的存储查询等类似的事情,那么数据库可以增长。
如果您的查询很慢,这不是因为数据库大小,因为在许多情况下,Access 倾向于附加数据更改而不是处理数据更改。
我会调查你所有表格的索引。查找使用 WHERE 子句且列未编入索引的任何查询。您可能需要为具有多种
colname=
组合的 WHERE 子句考虑复合索引。我关心的是 HOUSES 表中的列数。60 列?那是很多列。更改是许多行的长度比 Access 想要的更长。从 HOUSES 表中仅获取一行可能是一项昂贵的操作。您应该研究非规范化 HOUSES 表。您可以转到
Database Tools
选项卡,然后单击Analyze Table
。此外,您可以直接转到
Database Tools
选项卡,然后单击Analyze Performance
并开始测量其他潜在瓶颈。如果数据库开始变得太大(超过 1GB),或者您的数据库经常对行进行大量更新,您应该定期运行 Compact/Repair。您可能会惊讶于这样做会回收多少空间。您可以通过以下两种方式之一进行:
例子
C:\Program Files\Microsoft Office\Office14
C:\LWDBA\RolandosDatabase.accdb
批处理文件
然后在您选择的时间间隔内让 Windows 任务启动此批处理文件