【问题标题】:.MoveNext very slow on DAO recordset.MoveNext 在 DAO 记录集上非常慢
【发布时间】: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]

这根本没有改变时间。有什么方法可以加快这个查询速度,尤其是在有多个用户的情况下?

【问题讨论】:

    标签: sql ms-access dao


    【解决方案1】:

    这不是您的问题。这是你的桌子。您的过滤器位于较小的表上,因此它们不需要索引。但是,您的大表 sd 需要在 filename 上建立索引,具体取决于您在查询中使用它的方式。

    【讨论】:

      猜你喜欢
      • 2014-07-15
      • 2018-12-31
      • 1970-01-01
      • 2012-10-28
      • 1970-01-01
      • 2020-01-20
      • 2015-02-23
      • 2014-02-27
      • 1970-01-01
      相关资源
      最近更新 更多