2

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

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

  • 微软访问 2013
  • ODBC SQL 本机 11.0
  • 表已链接(不是 Web 应用程序)

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

4

2 回答 2

0

我将访问用作红砖数据仓库的前端。我们的情况可能有一些相似之处。我的观察是,如果 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.

如果我提交的值导致不返回任何记录,则它是即时的。但是,即使只返回一条记录,我也看到这种 sql 在 redbrick 中运行。

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。

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

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

于 2013-04-23T02:57:20.260 回答
0

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

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

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

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

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

  • 如果您的索引不适合您运行的查询类型,那么您最终可能会获得比必要更多的数据。

您可以尝试缓解问题

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

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

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

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

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

参考

于 2013-04-23T03:40:28.790 回答