2013-05-30 117 views
0

很慢我打开下面的查询DAO记录:.MoveNext在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大约有500000条记录和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) 

当我有数据库作为唯一的用户,我第一次打电话.MoveNextrs开放的,它需要1-2分钟才能执行;之后,每个.MoveNext发生在不到一秒钟。当数据库中有多个用户时,每个.MoveNext需要1-2分钟。

表已在sdn.Line,o.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] 

这并没有改变的时候都没有。有没有什么办法来加快这个查询,特别是如果有多个用户?

回答

0

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