0

我有一个打开以下查询的 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)

当我以唯一用户身份打开数据库时,第一次调用.MoveNextrs,执行需要 1-2 分钟;之后,每一个.MoveNext都在不到一秒的时间内发生。当数据库中有多个用户时,每个.MoveNext需要 1-2 分钟。

表已在sdn.Lineo.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]

这根本没有改变时间。有什么方法可以加快这个查询,特别是如果有多个用户?

4

1 回答 1

0

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

于 2013-05-30T23:11:57.920 回答