1

我在 Access 中有这个查询:

SELECT TOP 10 title,
  ConcatRelated("DOCTEXT","DocumFrag", "title='" & title & "'" ) AS result
FROM DocumFrag
GROUP BY title;

DocumFrag 包含大约 9000 条记录,ConcatRelated 是在这里找到的 VBA 代码:http: //allenbrowne.com/func-concat.html

当我仅针对 TOP 10 运行此查询并完成时,它会持续滞后到 20 秒的响应时间(单击、键入等)。

有没有办法可以改进它以使其更稳定?我以 TOP 10 为例来测试它是否滞后;最后我需要全选。

此查询的目标与在数据库(MS Access)或服务器端代码(ASP.NET)中连接记录值相同(在 Access 中,而不是 ASP.NET 中除外)

或者有没有一种方法可以使用查询而不是 VBA 来完成?

4

2 回答 2

2

我最好的猜测是 ConcatRelated 评估“DocumFrag”中的每个“标题”。在应用函数之前,选择内部查询中的前 10 个:

SELECT q.title, ConcatRelated("DOCTEXT","DocumFrag", "title='" & q.title & "'" ) AS result
FROM 
    (SELECT TOP 10 title FROM DocumFrag) AS q
GROUP BY q.title;
于 2013-03-21T14:57:14.330 回答
0

是的,首先确保您的数据表有一个聚集索引(这决定了数据存储在磁盘上的顺序),否则您有一个堆,并且 sql 引擎需要查询整个表,因为数据可以在表中的任何位置。2nd 在查询参数和要返回的数据上放置一个覆盖索引。第三,您正在尝试对文本进行分组?最好找到前 10 个项目,然后将与它们关联的文本合并,而不是像您的代码那样合并每个组项目,然后选择前 10 个。

于 2013-03-21T14:55:48.493 回答