如何提高这个查询和VBA的效率?(How to improve efficiency of this

2019-10-17 21:04发布

我在访问该查询:

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访问)或服务器端代码(ASP.NET)串联记录值 (除访问,而不是ASP.NET)

或者是有办法,我可以做到这一点使用查询,而不是VBA?

Answer 1:

我最好的猜测是,在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;


Answer 2:

是的,第一次请确保您的数据表中有一个聚集索引(这决定了数据存储在磁盘上的顺序),否则你有一个堆和SQL引擎需要查询整个表的数据可以在表中的任何地方。 第二把覆盖索引的查询参数,并要返回的数据。 3你想组的文本? 这将是更好地找到顶级的10个项目,然后与他们conconate文本关联,而不是你的代码是做conconate每个组项目,然后选择前10名。



文章来源: How to improve efficiency of this query & VBA?