链接到Access时SQL Server速度很慢

时间:2013-06-07 18:44:55

标签: sql-server-2005 ms-access

我在SQL Server中有一个表链接到Access,我注意到这样做之后,现在我的查询显然很慢。我真的想只是取消链接表,但有一些需要这个表的访问程序,所以这不是一个选项。有谁知道为什么会发生这种情况或如何解决这个问题。我一直在研究这个问题并且没有成功。

2 个答案:

答案 0 :(得分:1)

大多数选择是否只是基于一个表应该表现得相当好。但是,对表的更新往往运行缓慢,应该转换为pass-thought。

对于基于涉及多个表的查询的复杂报表,尤其是具有聚合函数的表,应转换为VIEW。然后,您只需将报告链接到视图,性能应该没问题。此设置还意味着您传递给报表的任何“where”子句都可以正常工作,而无需修改现有的VBA过滤器代码(过滤器只会根据来自sql server的过滤器 - 而不是整个表来拉下记录)。

因此,对于必须在大型表上运行的更新查询,只需使用pass-though。

如果您在VBA中有“动态”SQL代码需要更新大量行,那么您可以使用以下方法创建服务器端SQL:

Dim qdfPass       As DAO.QueryDef 

Set qdfPass = CurrentDb.QueryDefs("MyPass") 
qdfPass.SQL = "my server side sql goes here"
qdfPass.Execute

你也可以使用上面的传递来检索这样的记录:

Dim qdfPass       As DAO.QueryDef 
Dim rstData       As DAO.RecordSet

Set qdfPass = CurrentDb.QueryDefs("MyPass") 
qdfPass.SQL = "my server side sql goes here"
set rstData =  qdfPass.OpenRecordSet

因此表单和报表可以REMAIN绑定到链接表。并且传递一个where子句将被过滤(不是整个表被拉)。

如此简单的表选择应该运行良好但是当你引入连接和聚合quires,或者必须更新大量的行时,使用上面的pass-though想法将给你100%的服务器端性能,这应该非常快。

答案 1 :(得分:0)

桌子上有适当的索引吗?可能是一个愚蠢的问题,但有些人不知道如何正确使用索引。