N结果后的Microsoft Access停止查询

时间:2014-10-23 22:22:37

标签: sql performance ms-access limit

我有一个需要从网络驱动器运行的MS Access 2007数据库。 (我们可以访问的任何服务器都要慢得多。)由于每个查询中的数据量非常庞大,网络延迟仍然会增加大量的搜索时间。

(是的,数据库是在任何已加入或已处理的字段上编制索引的。应用程序通过ADODB断开连接的记录集专门访问它。搜索算法只对数据库进行两次往返,因为只有一次性能更差。)

为了提高性能,我想将搜索限制为30个成功的结果。 (对于我的用例,可能只有10个。)为了达到这个目的,我使用:

SELECT DISTINCT TOP 30...

在测试中,我意识到数据库中超过30的匹配越多,查询所需的时间越长,即使使用TOP关键字,搜索仍会处理整个记录集,然后返回最高结果。

我正在寻找一个技巧来让查询停止并在满意数量的匹配后返回,而不是再费心去处理任何事情。任何帮助表示赞赏!

1 个答案:

答案 0 :(得分:0)

你真的不能这样做。 MS Access必须在获得不同之前生成整个列表。你可以尝试这样的事情:

select distinct top 30 t.*
from (select top 100 *
      from . . .
     ) as t;

您不能保证前100名有30个值,因此您可能需要200或500或其他。

这可能有所帮助,但其他结构可能需要花费大量时间,例如order bygroup by。您可能无法如此简单地完成您想要的任务。