.MoveNext在DAO记录集上非常慢

时间:2013-05-30 22:08:30

标签: sql ms-access dao

我有一个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)

当我将数据库作为唯一用户打开时,我第一次在.MoveNext上调用rs时,执行需要1-2分钟;之后,每个.MoveNext发生在不到一秒钟。当数据库中有多个用户时,每.MoveNext个用户需要1-2分钟。

表格已在sdn.Lineo.idsd.oID上编入索引。

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

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

这并没有改变时间。有没有办法加快这个查询,特别是如果有多个用户?

1 个答案:

答案 0 :(得分:0)

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