MS Access 中通过 ODBC 连接 MS SQL 表的查询非常慢
Posted
技术标签:
【中文标题】MS Access 中通过 ODBC 连接 MS SQL 表的查询非常慢【英文标题】:Very slow queries in MS Access with joined MS SQL table via ODBC 【发布时间】:2019-08-29 16:02:26 【问题描述】:当我想将 Access 前端应用程序与 MSSQL Server 中的一些链接表(通过 ODBC)一起使用时,最好的解决方案是什么?
这对我来说的困难在于我必须使用具有许多多个连接的复杂查询(以及从查询中调用的函数)。 由于两个数据库之间的连接,它非常非常慢(并且某些表中有很多数据,2 GB Access mdb限制是MSSQL DB升级的原因)。
由于连接的 Access 表,直通查询没有帮助。 使用 OPENDATASOURCE('Microsoft.ACE.OLEDB.12.0'... 在 SQL Server 中它仍然很慢。我尝试使用 MSSQL 中的 WHERE 子句的 ODBC 链接视图,但它 看起来和整张桌子一样慢。
我必须将所有连接的 Access 表移动到 MSSQL DB 并将所有查询转换为 Pass-Through?有没有其他解决办法?
【问题讨论】:
无论您如何切片,跨系统连接都会非常缓慢。链接表对于性能来说真的很糟糕。我会将您的 Access 表移动到 SQL Server 并在一个数据库中获取您的所有数据。 在很多情况下,代替 PT 查询,我建议您创建一个视图服务器端,然后链接该视图。这种设置往往是工作量最少的,并且可以使用打开表单或打开报表的“where”子句过滤生成的链接表。因此,您会发现它们比 PT 查询报告甚至表格更有效。 【参考方案1】:我必须将所有连接的 Access 表移动到 MSSQL DB
是的,当然。
并将所有查询转换为 Pass-Through?
不一定,只有那些仍然很慢的。
“正常”INNER JOIN 查询,仅使用来自一个服务器数据库的链接表,由 Access 和 ODBC 驱动程序以一种在服务器上处理所有内容的方式处理。它们应该(或多或少)与在服务器上运行(或作为传递查询)时一样快。
只有“复杂”的查询,尤其是涉及多个 INNER 和 OUTER JOIN 的查询,不会这样工作。您会注意到在链接表上运行时它们仍然很慢。这些需要更改为传递查询。
编辑:我刚刚注意到
从查询调用的函数
您不能从 PT 查询中调用 VBA 函数,当从链接 MSSQL 表上运行的 Access 查询中调用它们时,它们会再次降低性能(因为它们必须在本地处理)。
您需要学习在 MSSQL 中创建视图,可能还需要学习用户定义的函数和/或存储过程。 从长远来看,您会发现视图实际上比 PT 查询更易于管理。
【讨论】:
以上是关于MS Access 中通过 ODBC 连接 MS SQL 表的查询非常慢的主要内容,如果未能解决你的问题,请参考以下文章