Microsoft Access和SQL Azure性能问题

时间:2013-04-23 01:55:06

标签: sql ms-access azure

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

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

  • MSAccess 2013
  • ODBC SQL Native 11.0
  • DAO
  • 表格已关联(不是网络应用)

任何机构都有任何想法或性能问题。

2 个答案:

答案 0 :(得分:0)

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

我所看到的与此类似。让我们说我的redbrick表,我们称之为MyTable,有一个5列主键。其中一个被称为TheDate。我在访问中构建了一个基本类似于此的查询:

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

如果我提交的值不会导致返回任何记录,那么它就是即时的。但是,即使只返回一条记录,我也会看到这种以redbrick运行的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。

另一方面,传递查询就像直接查询数据库一样。此外,对具有单个主键的表的查询很快。

这可能是你发生的事情。或者它可能是别的东西。

答案 1 :(得分:0)

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

如果是这种情况,有很多事情会影响绩效:

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

  • 在您的查询中,如果您将本地表与远程表混合,请小心,如果MSAccess无法优化查询,您最终会传输大量数据,可能会占用整个表。

  • 如果在SQL Server中的每个表上都没有ROWVERSION字段,MSAccess将需要读取比确定特定行是否已更改所需的更多数据(如果需要更改)读取所有字段以将它们与其缓存进行比较)。

  • 如果您的索引不适合您运行的查询类型,那么您最终还可能需要提取更多数据。

您可以尝试缓解问题

  • 确保您的查询不会提取超出实际需要的数据 使用SQL Server的探查器工具可以准确找出正在执行的内容以及Access请求的数据量。

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

  • 在SQL Server上定义将返回所需数据的视图,然后将这些视图作为前端表格链接。

  • 定义可以计算和返回所需数据的存储过程。

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

参考