MS-Access SQL 查询如何在远程位置的.mdb文件上运行

本文关键字:位置 mdb 文件 运行 查询 SQL 程位置 MS-Access | 更新日期: 2023-09-27 17:57:00

我试图了解对.mdb文件进行查询的工作原理。假设文件位于共享驱动器 PC2 上,我从 PC1 以编程方式打开它。

当我连接到.mdb文件时,我假设PC2上没有启动MS Access的"实例"(因为它是一个简单的文件服务器)。这是对的吗?

当我进行SQL查询时,它是否必须在本地复制表,然后运行查询,然后返回我的结果并丢弃表和任何多余的数据?

如果我对查询进行"排序"会发生什么情况? 是返回整个查询,然后在本地排序,还是以某种方式远程排序?

我确定我还有其他问题,但我正在尝试了解如何从远程位置连接到 MDB 文件。(我们所在的延迟相当长,因此特定查询可能需要 9 秒,这对我来说是不可接受的,我试图了解这是如何工作的以及是否可以改进)。

在这种情况下,我

正在使用 c#,我不希望这应该有太大区别,但可能会在您的响应中。

MS-Access SQL 查询如何在远程位置的.mdb文件上运行

当我连接到.mdb文件时,我假设 [远程机器] 上没有启动 MS Access 的"实例"(因为它是一个简单的文件服务器)。这是对的吗?

是的。应用程序将与本地计算机上的 Access 数据库引擎副本进行交互,而该副本又从远程计算机上的数据库文件中检索信息。

当我进行SQL查询时,它是否必须在本地复制表,然后运行查询,然后返回我的结果并丢弃表和任何多余的数据?

不一定。根据所涉及的表的索引方案,Access 数据库引擎可能只需要检索相关索引,然后确定数据文件中包含要检索的记录的特定页。在某些情况下,它可能需要检索整个表(例如,当需要全表扫描时),但情况并非总是如此。

如果我对查询进行"排序"会发生什么情况? 是返回整个查询,然后在本地排序,还是以某种方式远程排序?

Access

文档指出,索引将加快排序操作的速度(参考:此处),这表明 Access 数据库引擎可以按排序顺序从远程文件中检索所需的行。

你的直觉是正确的,mdb/mde dbs 只是美化的文本文件,必须在本地处理。以下是有关网络性能的一些提示: http://www.granite.ab.ca/access/performancefaq.htm

但是,由于SQL Server Express是免费的,因此几乎没有理由不迁移,特别是因为Access有一个工具可以为您管理它。在低容量多用户环境(例如 2-10 个)中,MS Access 可以正常工作,但对于以任何方式可能增加用户和/或事务量的企业解决方案,您将面临灾难。

补充一下戈德的答案...

访问数据库是通过 Windows 文件页锁定访问的。我的理解是,Microsoft添加了此页面锁定,专门供MS Access使用(但也可用于通过Windows API的任何文件)。

由于实例是本地实例,冲突和冲突通过文件页锁定处理,因此客户端-服务器争用是一个问题。此处存在访问已知问题。这就是为什么应该尽可能切换到SQL Server Express(也是免费的)。但是,是的,MS Access具有一定程度的便利性;SSE 的占用空间更大,GUI 也不太友好

所有桌面数据库都有客户端/服务器问题。戈德的回答与我的知识相符。索引的要点是减少需要在本地拉取的表数据量。与表数据相比,拉取索引是一项相对较小的任务。这是标准的索引优化,尽管我想说它对于桌面数据库更为重要,因为远程数据和文件分页。

通常,访问(JET)引擎不会远程执行任何操作。它都是在本地 MSA/Jet 引擎中本地抓取和执行的文件数据。您知道这一点,因为引擎是在本地安装的,不必安装在文件主机上。然而,这是一种方便快捷的分散处理负载的方法。:)