我在SQL Server中有一个表链接到Access,我注意到这样做之后,现在我的查询显然很慢。我真的想只是取消链接表,但有一些需要这个表的访问程序,所以这不是一个选项。有谁知道为什么会发生这种情况或如何解决这个问题。我一直在研究这个问题并且没有成功。
答案 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)
桌子上有适当的索引吗?可能是一个愚蠢的问题,但有些人不知道如何正确使用索引。