【发布时间】:2014-07-20 00:07:56
【问题描述】:
我正在为 Access 中的 SQL Server 重新设计一个前端,以允许我们公司的非程序员查询数据库。
问题是有些表非常大。目前我正在使用链接表。我试图允许的一个查询访问五个表,包括那个大表。该表有数百万行,因为它包含了公司中的每笔交易。
当我在 Access 中尝试查询时,它花费了几分钟并且无法完成,并且 Access 只是冻结了。因此,我决定在进行联接之前使用子查询来缩小大表的范围。表中的每个条目都有一个日期,所以我做了一个子查询并过滤它以仅返回当前日期以进行测试。事实上,因为我只是在测试,我什至进一步过滤它只返回日期列。这将其缩小到 80,000 个左右。最终我确实得到了结果,但花了大约三分钟,这只是我正在测试的子查询。一旦结果 DID 返回,每次我尝试使用滚动条时,Access 都会冻结。
接下来我尝试了直通查询,认为它会更快。它更快,但仍然需要大约一分半钟,并且滚动条仍然存在冻结问题。问题是这个查询在 SQL 服务器上只需要 3 秒(我的意思是日期查询)。我希望我能很快得到这个查询,然后将它用于连接。
我可以使用视图,但问题是我希望用户能够指定日期范围。
我能做些什么来加快这个性能还是我搞砸了?
【问题讨论】:
-
可能不是查询很慢,更可能是在 UI 中呈现结果网格。您真的需要将那么多记录返回给用户吗?我怀疑很多人会滚动浏览 80000 条记录。我会限制查询,所以如果可行,它只返回前一百行。
-
传递肯定是简短的答案...您能否发布表和键的图像 - 包括每个是本地的还是在 SQL Server 上,以及您尝试过的查询?
-
您是否检查过日期是否有索引?它有很大的不同。
-
@Remou 我正在使用 SQL Server 数据库。嗯...至于索引,我实际上是附加到视图,而不是表本身(因为我需要将 ID 列从 long 转换为 varchar 以便 Access 导入它。) create_date 上没有索引的视图,但在原始表中有,当我在 SQL 服务器上查询视图时,它仍然只需要 3 秒。
-
我想你已经找到了你的问题,如果你的查询不是 sargable,Access 会拉取所有的数据,而不仅仅是相关的行。我不明白为什么你对 long 有问题,我不明白。哪个版本的 Access?
标签: sql sql-server performance ms-access