我们正在试用SQL Azure作为Microsoft Access的后端。然而,我们在运行代码中的简单查询或作为查询时遇到巨大的性能问题。当从本地SQL Management Studio查询窗口直接针对SQL Azure数据库运行相同的查询时,它会正常执行。Microsoft Access和SQL Azure性能问题
注意:相同的查询对本地SQL数据库执行正常。
- MSACCESS 2013
- ODBC SQL本机11.0
- DAO
- 表链接(不是Web应用程序)
任何机构有任何意见或性能问题。
我们正在试用SQL Azure作为Microsoft Access的后端。然而,我们在运行代码中的简单查询或作为查询时遇到巨大的性能问题。当从本地SQL Management Studio查询窗口直接针对SQL Azure数据库运行相同的查询时,它会正常执行。Microsoft Access和SQL Azure性能问题
注意:相同的查询对本地SQL数据库执行正常。
任何机构有任何意见或性能问题。
我使用访问作为红砖数据仓库的前端。我们的情况可能有些相似之处。我的观察是,如果红砖表具有多列主键,则查询需要很长时间。事实上,我甚至能够看到会发生什么。
我看到的就像这样。让我们说我的红砖表,我们称之为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。
另一方面,传递查询就像直接查询数据库一样。此外,使用单个密钥主键对表进行查询很快。
这可能是发生在你身上的事情。或者它可能是别的。
谢谢你的回复。我的查询是从一个表到另一个表的简单附加。我相信我需要使用传递查询。 – pacster 2013-04-26 04:43:54
如果我理解正确,您是从Azure上的远程SQL Server实例链接表并在MS Access前端运行您的查询?
如果是这样的话,有很多的东西可以影响性能:
访问尝试运行服务器尽可能在查询,但如果你正在写你的查询并不总是如此需要Access从服务器上拉出原始表数据以在本地执行查询本身。
例如,如果在查询中使用UDF(VBA中的用户定义函数),或者如果您使用的功能只有Access,而不是SQL Server,则会发生这种情况。
在您的查询中,如果将本地表与远程表混合在一起,请注意传输大量数据,如果查询无法通过MSAccess优化,则可能会传输整个表。
如果您在SQL Server中的每个表上都没有ROWVERSION字段,MSAccess将需要读取比需要确定特定行是否已更改(如果需要读取所有的领域比较他们的缓存)。
如果你的索引不适合于您运行的查询的类型,你也可以最终了更大量的数据被拉到比必要。
您可以尝试减轻这些问题
确保您的查询不拉更多的数据比你真正需要的。
使用分析器工具SQL Server来找出正在执行什么,有多少是通过访问请求的数据。
使用传递查询。他们将完全在服务器上运行。
定义SQL Server上的意见,将返回你所需要的数据,然后链接这些意见,在您的前端表。
定义的存储过程,可以计算并返回你需要的数据。
避免将远程数据绑定到包含太多控件的表单。
参考
感谢您的回复,我会检查。 – pacster 2013-04-26 04:42:47
我还没有跟上了几年的访问,而不能以2013说话,但在过去的访问会带来多大的数据通过线路和做大量的处理,包括的连接和WHERE子句过滤,在客户端上。对服务器引擎使用Access的唯一真正的带宽有效的方法是发出传递查询。 – Tim 2013-04-23 02:24:35