我有一个打开以下查询的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有大约5,000条记录和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上建立了索引。
我尝试以不同的方式构造查询,希望减少要处理的总行数:
select pointnumber from
(select pointnumber,filename from sd where oID=[oID]) sd
inner join
sdn
on
sd.filename=sdn.filename
where
sdn.line<>[sdnLine]这根本没有改变时间。有没有办法加速这个查询,特别是在有多个用户的情况下?
发布于 2013-05-31 07:11:58
这不是你的问题。这是你的桌子。您的筛选器位于较小的表上,因此它们不需要索引。但是,根据您在查询中使用filename的方式,您的大表sd将需要一个针对use的索引。
https://stackoverflow.com/questions/16846638
复制相似问题