Cod*_*key 7 performance networking ms-access multiple-databases
我有一个Access数据库,其中包含有关人员的信息(员工档案和相关信息).前端有一个类似控制台的界面,可以一次修改一种类型的数据(例如一种形式的学位,另一种形式的联系信息).它目前链接到多个后端(每种类型的数据一个,一个用于基本配置文件信息).所有文件都位于网络共享上,许多后端都是加密的.
我之所以这样做是因为我了解MS Access必须将整个数据库文件拉到本地计算机才能进行任何查询或更新,然后将任何已更改的数据放回网络共享.我的理论是,如果一个人正在更改电话号码或地址(联系信息),他们只需要提取/修改/替换联系信息数据库,而不是拉一个包含联系信息,项目,学位,奖励的大型数据库等等,只需更改一个电话号码,从而减少多个用户访问数据时锁定数据库和网络流量的可能性.
这是一个明智的结论吗?我是否误解了很多?我错过了别的什么吗?
我意识到每个文件都需要考虑开销,但我不知道其影响有多大.如果我要巩固后端,那么还有一个潜在的好处就是能够让Access处理级联删除等的参照完整性,而不是编码...
我很感激任何想法或(合理有效的)批评.
这是一个常见的误解:
MS Access必须将整个数据库文件提取到本地计算机才能进行任何查询或更新
考虑这个查询:
SELECT first_name, last_name
FROM Employees
WHERE EmpID = 27;
Run Code Online (Sandbox Code Playgroud)
如果EmpID被编入索引,数据库引擎将读取足够的索引以查找哪些表行匹配,然后读取匹配的行.如果索引包含唯一约束(比如EmpID是主键),则读取速度会更快.数据库引擎不读取整个表,也不读取整个索引.
如果没有EmpID索引,引擎会对Employees表进行全表扫描 - 这意味着它必须从表中读取每一行以确定哪些包含匹配的EmpID值.
但无论哪种方式,引擎都不需要读取整个数据库......客户端,库存,销售等表...它没有理由读取所有数据.
您确定连接到后端数据库文件的开销是正确的.引擎必须管理每个数据库的锁定文件.我不知道这种影响的程度.如果是我,我会创建一个新的后端数据库并从其他数据库导入表.然后制作前端的副本并重新链接到后端表.这将使您有机会直接检查性能影响.
在我看来,关系完整性应该是将表合并到一个后端的有力论据.
关于锁定,您不应该需要锁定整个后端数据库以进行例行DML(INSERT,UPDATE,DELETE)操作.数据库基础引擎支持更精细的锁定.还有悲观与机会主义的锁定 - 一旦你开始编辑一行就会发生锁定,或者在你保存更改的行之前推迟锁定.
实际上,如果慢速意味着无线网络,"慢速网络"可能是最大的问题.访问仅在硬连线LAN上安全.
编辑:访问不适用于WAN网络环境.请参阅Albert D. Kallal的这一页.
| 归档时间: |
|
| 查看次数: |
10522 次 |
| 最近记录: |