首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >DAO记录集上的.MoveNext速度非常慢

问DAO记录集上的.MoveNext速度非常慢
EN

Stack Overflow用户
提问于 2013-05-31 06:08:30
回答 1查看 882关注 0票数 0

我有一个打开以下查询的DAO记录集:

代码语言:javascript
复制
SELECT sd.pointnumber
FROM (sdn INNER JOIN sd ON sdn.filename=sd.filename) 
INNER JOIN o ON sd.oID = o.id
WHERE o.id = [oID] 
And sdn.Line <>  [sdnLine];

表sd有大约500,000条记录和30列,表sdn有大约5,000条记录和4列。表O有6条记录和12列。

我用以下命令打开记录集:

代码语言:javascript
复制
Dim qdf As QueryDef
Set qdf = CurrentDb.QueryDefs("oSdSdn2")
qdf.Parameters("oID") = oID
qdf.Parameters("sdnLine") = line
Set rs = qdf.OpenRecordset(dbOpenForwardOnly)

当我以唯一用户的身份打开数据库时,当我第一次在rs上调用.MoveNext时,它需要1-2分钟的时间来执行;之后,每次.MoveNext的执行时间不到一秒。当数据库中有多个用户时,每次.MoveNext需要1-2分钟。

表已经在sdn.Line、o.id和sd.oID上建立了索引。

我尝试以不同的方式构造查询,希望减少要处理的总行数:

代码语言:javascript
复制
select pointnumber from
(select pointnumber,filename from sd where oID=[oID]) sd
inner join
sdn
on
sd.filename=sdn.filename
where
sdn.line<>[sdnLine]

这根本没有改变时间。有没有办法加速这个查询,特别是在有多个用户的情况下?

EN

回答 1

Stack Overflow用户

发布于 2013-05-31 07:11:58

这不是你的问题。这是你的桌子。您的筛选器位于较小的表上,因此它们不需要索引。但是,根据您在查询中使用filename的方式,您的大表sd将需要一个针对use的索引。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16846638

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档