MS Access 中通过 ODBC 连接 MS SQL 表的查询速度非常慢

问题描述 投票:0回答:2

当我想将 Access 前端应用程序与 MSSQL Server 中的某些链接表(通过 ODBC)结合使用时,最佳解决方案是什么?

对我来说,这样做的困难在于我必须使用具有许多多重连接的复杂查询(以及从查询调用的函数)。 由于两个数据库之间的联接,它非常非常慢(并且某些表中有大量数据,2 GB Access mdb 限制是 MSSQL 数据库升级的原因)。

由于连接了 Access 表,传递查询没有帮助。 使用 OPENDATASOURCE('Microsoft.ACE.OLEDB.12.0'... 在 SQL Server 中仍然很慢。我尝试使用 MSSQL 中的 WHERE 子句进行 ODBC 链接视图,但它 看起来和整张桌子一样慢。

我必须将所有联接的 Access 表移至 MSSQL 数据库并将所有查询转换为直通?还有其他解决办法吗?

sql-server ms-access odbc oledb
2个回答
0
投票

我必须将所有连接的 Access 表移动到 MSSQL DB

是的,绝对是。

并将所有查询转换为直通?

不一定,只有那些仍然很慢的。

“正常”INNER JOIN 查询仅使用一个服务器数据库中的链接表,由 Access 和 ODBC 驱动程序处理,所有内容都在服务器上处理。它们应该(或多或少)与在服务器上运行(或作为传递查询)时一样快。

只有“复杂”查询,尤其是涉及多个 INNER 和 OUTER JOIN 的查询,才不会这样工作。您会注意到它们在链接表上运行时仍然非常慢。这些需要更改为直通查询。


编辑:我刚刚注意到

从查询调用的函数

您无法从 PT 查询调用 VBA 函数,并且当从在链接的 MSSQL 表上运行的 Access 查询调用时,它们将再次降低性能(因为它们必须在本地处理)。

您需要学习在 MSSQL 中创建视图,可能还需要学习用户定义的函数和/或存储过程。
从长远来看,你会发现视图实际上比 PT 查询更容易管理。


0
投票

我也遇到了这个问题,不过解决办法很简单。只需通过控制面板 -> 管理工具 -> ODBC 32bit/64bit 访问 ODBC 连接即可。然后,通过选择“跟踪”选项卡下的“立即停止跟踪”来停止跟踪。这将成功解决问题。

© www.soinside.com 2019 - 2024. All rights reserved.