[英].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.Line
, o.id
和sd.oID
上sdn.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.