我在同一本地网络中有一个 SQL 服务器和 MS Access 数据库 - 1 Gbit/秒。 SQL Server 中的许多表通过 ODBC 链接到 MS Access 数据库。 MS Access 数据库中的查询使用了很多表。它打开速度很快 - 几秒钟。 然后我将所有这些表链接到另一个具有相同表的 SQL 服务器,但该 SQL 服务器位于 Amazon 虚拟机中。连接速度也约为 1 Gbit/秒。 但同样的查询打开速度非常慢 - 超过 5 分钟。 本地网络和互联网 ODBC 之间有什么区别?我可以以某种方式加快速度吗?
问题是您与云中服务器的连接不是 1 GB/秒。速度可能慢 10 倍。好吧,慢 10 倍就是慢 10 倍。
因此,如果本地网络上的某些操作需要 2-3 秒,现在将需要 20-30 秒。
事实证明,连接速度慢得多,慢得多!
我的意思是,在那个云系统上放置一个文件,然后下载它,然后在这里告诉大家你看到并获得的速度是多少?
因此,归根结底,您必须开始优化应用程序。正如您所说,当您在本地网络上时,该系统运行得很好,但在通过互联网运行到云系统时则不然。
更糟糕的是,如果用户在家并且在工作时没有使用昂贵的花式裤子高速连接,会发生什么情况?现在,事情会变得更慢,因为不是每个人都能负担得起真正一流的互联网计划。因此,如果一些在家工作的员工通过 VPN 连接到公司网络,那么他们的连接速度将会比您现在遇到的情况慢得多。
因此,您需要并且想要开始优化应用程序的一些较慢的部分。
例如,您永远不想只打开一个表单而不对表单加载的记录数量进行一些限制。
您仍然可以很好地使用直接绑定到链接表的表单,但您始终希望限制拉入该表单的数据。
例如,我们有一个直接绑定到链接表(驻留在 SQL Server 中)的客户表单。
您可以使用以下内容:
docmd.OpenForm "frmCustomers",,,"QuoteNum = 123243"
在上面,Access 很聪明,只会从 100 万行表中提取一条记录,因此即使在相对较慢的连接上,Access 表单也应该加载得相当快。 (只有一条记录会从网络管道中下来,尽管我们没有查询,没有存储过程,并且链接表直接绑定到具有 100 万行的表)。
但是,如果表单(或报表)基于多个链接表,则联接发生在 Access 的客户端,并且通常此类查询会相当慢。
简单的解决方案是获取查询源(表单绑定到的查询),然后将该 SQL 粘贴到 SQL SSMS 中并转换为视图。现在,在 Access 客户端中,只需重命名(或删除)查询,然后链接到 SQL Server 视图。这种简单的方法现在将提高存储过程的性能,但无需更改 VBA 代码来过滤表单。
因此,在使用慢得多的连接并采用视图时需要付出额外的努力,并且需要努力限制拉入给定表单的记录数量。
如上所述,您可以继续使用直接绑定到链接表的表单,但是您必须确保限制拉入该表单的记录。