0

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

4

2 回答 2

1

如果仅基于一个表,大多数选择应该执行得相当好。但是,对表的更新确实往往运行缓慢,并且应该将其转换为临时考虑。

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

因此,对于必须在大型表上操作的更新查询,只需使用传递。

如果您在 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

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

对表进行如此简单的选择应该可以很好地工作,但是当您引入连接和聚合查询时,或者必须更新大量行时,使用上述传递想法将为您提供 100% 的服务器端性能,这确实应该非常快。

于 2013-06-09T09:50:29.370 回答
0

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

于 2013-06-07T20:04:19.260 回答