2013-04-23 70 views
2

我们正在试用SQL Azure作为Microsoft Access的后端。然而,我们在运行代码中的简单查询或作为查询时遇到巨大的性能问题。当从本地SQL Management Studio查询窗口直接针对SQL Azure数据库运行相同的查询时,它会正常执行。Microsoft Access和SQL Azure性能问题

注意:相同的查询对本地SQL数据库执行正常。

  • MSACCESS 2013
  • ODBC SQL本机11.0
  • DAO
  • 表链接(不是Web应用程序)

任何机构有任何意见或性能问题。

+0

我还没有跟上了几年的访问,而不能以2013说话,但在过去的访问会带来多大的数据通过线路和做大量的处理,包括的连接和WHERE子句过滤,在客户端上。对服务器引擎使用Access的唯一真正的带宽有效的方法是发出传递查询。 – Tim 2013-04-23 02:24:35

回答

0

我使用访问作为红砖数据仓库的前端。我们的情况可能有些相似之处。我的观察是,如果红砖表具有多列主键,则查询需要很长时间。事实上,我甚至能够看到会发生什么。

我看到的就像这样。让我们说我的红砖表,我们称之为MyTable,有一个5列主键。其中之一被称为TheDate。我建立访问查询,基本上类似于此:

select somefields 
from MyTable 
where field1 = [prompt for value] 
and TheDate > 7 days ago, whatever that syntax is in access. 

如果我认为导致返回任何记录的值,它的瞬间。但是,即使只返回一条记录,我也会看到这种以红砖运行的sql。

select somefields 
from MyTable 
where (field1 = something 
and TheDate = something 
and field 3 = something 
and field4 = something) 
or (same sort of thing for a different date) 
and so on for all 7 days in the date range. 

我不特别在意,因为我是用户,我认为结果值得等待。事实上,有时我在等待时看着StackOverflow。

另一方面,传递查询就像直接查询数据库一样。此外,使用单个密钥主键对表进行查询很快。

这可能是发生在你身上的事情。或者它可能是别的。

+0

谢谢你的回复。我的查询是从一个表到另一个表的简单附加。我相信我需要使用传递查询。 – pacster 2013-04-26 04:43:54

0

如果我理解正确,您是从Azure上的远程SQL Server实例链接表并在MS Access前端运行您的查询?

如果是这样的话,有很多的东西可以影响性能:

  • 访问尝试运行服务器尽可能在查询,但如果你正在写你的查询并不总是如此需要Access从服务器上拉出原始表数据以在本地执行查询本身。
    例如,如果在查询中使用UDF(VBA中的用户定义函数),或者如果您使用的功能只有Access,而不是SQL Server,则会发生这种情况。

  • 在您的查询中,如果将本地表与远程表混合在一起,请注意传输大量数据,如果查询无法通过MSAccess优化,则可能会传输整个表。

  • 如果您在SQL Server中的每个表上都没有ROWVERSION字段,MSAccess将需要读取比需要确定特定行是否已更改(如果需要读取所有的领域比较他们的缓存)。

  • 如果你的索引不适合于您运行的查询的类型,你也可以最终了更大量的数据被拉到比必要。

您可以尝试减轻这些问题

  • 确保您的查询不拉更多的数据比你真正需要的。
    使用分析器工具SQL Server来找出正在执行什么,有多少是通过访问请求的数据。

  • 使用传递查询。他们将完全在服务器上运行。

  • 定义SQL Server上的意见,将返回你所需要的数据,然后链接这些意见,在您的前端表。

  • 定义的存储过程,可以计算并返回你需要的数据。

  • 避免将远程数据绑定到包含太多控件的表单。

参考

+0

感谢您的回复,我会检查。 – pacster 2013-04-26 04:42:47