繁体   English   中英

.MoveNext在DAO记录集上非常慢

[英].MoveNext very slow on DAO recordset

我有一个DAO记录集,它会打开以下查询:

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大约有5000条记录和4列。 O有6条记录和12列。

我用以下方式打开记录集:

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.Lineo.idsd.oIDsdn.Line索引。

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

select pointnumber from
(select pointnumber,filename from sd where oID=[oID]) sd
inner join
sdn
on
sd.filename=sdn.filename
where
sdn.line<>[sdnLine]

这根本没有改变时间。 有什么方法可以加快此查询的速度,尤其是在有多个用户的情况下?

这不是您的查询。 这是你的桌子。 您的过滤器位于较小的表上,因此它们不需要索引。 但是,根据查询的使用方式,大表sd将需要在filename建立索引。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM