我有一个打开以下查询的 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.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]
这根本没有改变时间。有什么方法可以加快这个查询,特别是如果有多个用户?