【发布时间】:2013-05-30 22:08:29
【问题描述】:
我有一个打开以下查询的 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 上建立索引。
我尝试以不同的方式构造查询,希望减少要处理的总行数:
select pointnumber from
(select pointnumber,filename from sd where oID=[oID]) sd
inner join
sdn
on
sd.filename=sdn.filename
where
sdn.line<>[sdnLine]
这根本没有改变时间。有什么方法可以加快这个查询速度,尤其是在有多个用户的情况下?
【问题讨论】: