Sql 如何提高此查询的效率&;VBA?

Sql 如何提高此查询的效率&;VBA?,sql,performance,vba,ms-access-2010,Sql,Performance,Vba,Ms Access 2010,我在Access中有此查询: SELECT TOP 10 title, ConcatRelated("DOCTEXT","DocumFrag", "title='" & title & "'" ) AS result FROM DocumFrag GROUP BY title; DocumFrag包含约9000条记录,相关的VBA代码可在此处找到: 当我只对前10名运行此查询并完成时,它会持续延迟到20秒的响应时间(单击、键入等) 有什么方法可以让它更稳定吗?我以前10名为

我在Access中有此查询:

SELECT TOP 10 title,
  ConcatRelated("DOCTEXT","DocumFrag", "title='" & title & "'" ) AS result
FROM DocumFrag
GROUP BY title;
DocumFrag包含约9000条记录,相关的VBA代码可在此处找到:

当我只对前10名运行此查询并完成时,它会持续延迟到20秒的响应时间(单击、键入等)

有什么方法可以让它更稳定吗?我以前10名为例来测试它是否滞后;最后,我需要选择全部

我的查询目标与相同(除了Access,而不是ASP.NET)


或者,有没有一种方法可以使用查询而不是VBA来实现这一点?

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

我最好的猜测是,ConcatRelated对“DocumFrag”中的每个“title”进行评估。在应用函数之前,选择内部查询中的前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;

用户定义的函数很慢。在大多数情况下,您最好使用纯VBA,它甚至可能更快。也许可以尝试将此查询作为
快照运行。或者将结果输出到临时文件。表。@Mike A Snapshot仍然让它相当滞后,尽管可能有20%的帮助。@JBurace您将如何使用结果?如果将它们绑定到在同一时间只显示一条记录的窗体,则问题可能会消失。如果可以将它们导出到文件或临时表中。@Mike的目的是让用户在整个结果中按Ctrl+F组合键。但同时,“管理员”可能会定期更新查询从中提取的原始表。MS Access中的聚集索引?SQL是一个通用标记,这是MS Access。抱歉,更新了我的问题。最后我确实需要选择全部,前10名只是为了测试它的滞后程度。如果删除“前10名”,您是否检查了查询是否需要相同的时间完成?我不知道查询完成时间,这不是问题所在。问题是,当这个查询打开(但已完成)时,所有访问都会延迟。如果问题是每一行都运行ConcatRelated,那么我的查询的20秒延迟应该要短得多;如果只删除“前10名”,则保持不变。