慢速网络上的MS Access数据库:分离后端是否更快?

时间:2011-04-29 14:07:50

标签: ms-access networking performance multiple-databases

我有一个Access数据库,其中包含有关人员(员工档案和相关信息)的信息。前端有一个类似控制台的界面,可以一次修改一种类型的数据(例如一种形式的学位,另一种形式的联系信息)。它目前链接到多个后端(每种类型的数据一个,一个用于基本配置文件信息)。所有文件都位于网络共享上,许多后端都是加密的。

我这样做的原因是我了解MS Access必须将整个数据库文件拉到本地计算机才能进行任何查询或更新,然后将任何更改的数据放回网络共享。我的理论是,如果一个人正在更改电话号码或地址(联系信息),他们只需要提取/修改/替换联系信息数据库,而不是拉一个包含联系信息,项目,学位,奖励的大型数据库等等,只需更改一个电话号码,从而减少多个用户访问数据时锁定数据库和网络流量的可能性。

这是一个明智的结论吗?我是否误解了很多?我错过了别的什么吗?

我意识到每个文件都需要考虑开销,但我不知道其影响有多大。如果我要巩固后端,那么能够让Access处理级联删除等的参照完整性,而不是编写代码,也有潜在的好处......

我很感激任何想法或(合理有效的)批评。

2 个答案:

答案 0 :(得分:8)

这是一个常见的误解:

MS Access必须将整个数据库文件提取到本地计算机才能进行任何查询或更新

考虑这个问题:

SELECT first_name, last_name
FROM Employees
WHERE EmpID = 27;

如果EmpID被编入索引,数据库引擎将读取足够的索引以查找哪些表行匹配,然后读取匹配的行。如果索引包含唯一约束(比如EmpID是主键),则读取速度会更快。数据库引擎不读取整个表,也不读取整个索引。

如果没有EmpID索引,引擎会对Employees表执行全表扫描 - 这意味着它必须从表中读取每一行以确定哪些包含匹配的EmpID值。

但无论哪种方式,引擎都不需要读取整个数据库......客户端,库存,销售等表...它没有理由读取所有数据。

您确定连接到后端数据库文件的开销是正确的。引擎必须管理每个数据库的锁定文件。我不知道这种影响的程度。如果是我,我会创建一个新的后端数据库并从其他数据库导入表。然后制作前端的副本并重新链接到后端表。这将使您有机会直接检查性能影响。

对我而言,关系完整性应该是将表合并为一个后端的有力论据。

关于锁定,您不需要为常规DML(INSERT,UPDATE,DELETE)操作锁定整个后端数据库。数据库基础引擎支持更精细的锁定。还有悲观与机会主义的锁定 - 一旦你开始编辑一行就会发生锁定,或者在你保存更改的行之前推迟锁定。

如果慢速意味着无线网络,实际上“慢速网络”可能是最大的问题。访问仅在硬连线LAN上安全。

编辑:访问不适用于WAN网络环境。见Albert D. Kallal的this page

答案 1 :(得分:0)

ms访问不适用于速度肯定较低的局域网或广域网。解决方案是使用客户端服务器数据库,例如Ms SQL Server或MySQL。 SQL Server女士比My SQL更好,但是它不是免费的。考虑将SQL Server女士用于大型项目。我再次说,MS访问仅对1台计算机有利,对计算机网络不利。