Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ms-access/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ms access 慢速网络上的MS Access数据库:分离后端是否更快?_Ms Access_Networking_Performance_Multiple Databases - Fatal编程技术网

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

Ms access 慢速网络上的MS Access数据库:分离后端是否更快?,ms-access,networking,performance,multiple-databases,Ms Access,Networking,Performance,Multiple Databases,我有一个Access数据库,其中包含有关人员的信息(员工档案和相关信息)。前端有一个类似控制台的界面,可以一次修改一种类型的数据(例如一种表单的学位、另一种表单的联系信息)。它当前链接到多个后端(每种数据类型一个,基本配置文件信息一个)。所有文件都位于网络共享上,许多后端都经过加密 我这样做的原因是,我知道MS Access必须将整个数据库文件拉到本地计算机,以便进行任何查询或更新,然后将任何更改的数据放回网络共享。我的理论是,如果一个人正在更改一个电话号码或地址(联系信息),他们只需要拉/修改

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

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

这是一个明智的结论吗?我误解了很多吗?我还缺什么吗

我意识到每个文件都要考虑开销,但我不知道影响有多大。如果我要整合后端,还有一个潜在的好处,那就是能够让Access处理级联删除等的引用完整性,而不是为此进行编码


如果有任何想法或(合理有效的)批评,我将不胜感激。

这是一个常见的误解:

MS Access必须将整个数据库文件拉入本地计算机,以便进行任何查询或更新

考虑这个查询:

SELECT first_name, last_name
FROM Employees
WHERE EmpID = 27;
如果EmpID被索引,那么数据库引擎将读取足够的索引,以找到匹配的表行,然后读取匹配的行。如果索引包含唯一约束(例如EmpID是主键),则读取速度会更快。数据库引擎不读取整个表,甚至不读取整个索引

如果没有EmpID上的索引,引擎将对Employees表进行完整的表扫描——这意味着它必须读取表中的每一行,以确定哪些包含匹配的EmpID值

但无论如何,引擎都不需要读取整个数据库。。。客户、库存、销售等表格。。。它没有理由读取所有这些数据

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

在我看来,关系完整性应该是将表整合到单个后端的有力论据

关于锁定,您不需要为常规DML(插入、更新、删除)操作锁定整个后端数据库。数据库基引擎支持更细粒度的锁定。也是悲观锁定与机会主义锁定——锁定是在开始编辑行时发生,还是推迟到保存更改的行时发生

实际上,“慢网络”可能是最大的问题,如果慢意味着无线网络。只有在硬接线局域网上才能安全访问


编辑:访问不适合WAN网络环境。参见Albert D.Kallal。

ms接入不适合在局域网或广域网中使用,因为广域网的速度肯定较低。解决方案是使用客户机-服务器数据库,如Ms SQL server或MySQL。Ms SQL Server比我的SQL要好得多,但它不是免费的。考虑MS SQLServer用于大型项目。我再说一遍,MS access只适用于1台计算机,而不适用于计算机网络。

可能没什么帮助,但我改用了MySql。使用起来容易得多。我确实理解,不读取(如果解释为介于“处理”和“检查”之间的某个位置)比必要或不必要的列或行更深的索引。但是,我想特别问一下,这是否意味着只有您提到的文件部分(索引和具有匹配ID的行)通过网络传输,而没有传输任何其他数据慢速网络非常庞大(跨国),拥挤,需要进行多种级别的安全检查,但仍然是有线的。---锁定-我不主动锁定数据库,锁定是由于加密数据库。传统上,我想指出,我更喜欢在SharePoint/SQL Server环境中实现此功能,因为我觉得使用它(正确或错误)会更舒服一些。我认为使用访问前端和后端是我唯一的选择,因为我被限制在有办公室和网络共享的工作站上(没有网络、数据库服务器等可供使用,因为文书工作会花费太长的时间——我有没有提到这是一个军事上的小办公室?)也许“慢”不如“慢”准确我用一个关于访问和WAN的链接更新了我的答案。如果你还没有得到它,你最终会有数据库损坏。关于传输量,必须读取足够多的文件以确定系统表的位置(在文件中),然后查找您正在查询/更新/等的数据表的偏移量。此外,Windows和/或Access应用程序实例正在进行缓存,这会影响需要重新读取的数据量,但这些详细信息超出了我的薪资等级。继续…在多个后端数据库文件之间分发数据可能需要更多的网络数据传输。真的,依我看,你有更大的顾虑(Acces