我有一个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]
这并没有改变时间。有没有办法加快这个查询,特别是如果有多个用户?
答案 0 :(得分:0)
这不是你的疑问。这是你的桌子。您的过滤器位于较小的表上,因此不需要索引。但是,根据您对查询的使用方式,您的大表sd
需要filename
上的索引。