MS Access 日期范围函数减慢查询速度
Posted
技术标签:
【中文标题】MS Access 日期范围函数减慢查询速度【英文标题】:MS Access date range functions slowing down query 【发布时间】:2015-11-03 15:16:24 【问题描述】:我有一个查询,我在其中使用 between 语句来提取日期范围的数据。我构建了一个 VBA 函数,它将评估表中的最后日期(最大日期)(以获取中间的第一个日期)和另一个函数来评估停止日期(中间的最后日期)......所以我的日期语句之间看起来像这样:在 hhMaxDte() 和 hhLastDte() 之间
由于某种原因,在我的 between 语句中使用这 2 个函数,运行查询所需的时间似乎比我手动输入实际日期要长 8 倍。那里的任何人都知道为什么会这样,以及我如何动态地执行类似的过程,但运行查询所需的时间与手动输入日期时相同?我的功能代码如下:
Function hhMaxDte()
If DMax("row_date", "HH_CIB_Raw_Data") + 1 = Date Then
hhMaxDte = 0
Else
hhMaxDte = DMax("row_date", "HH_CIB_Raw_Data") + 1
End If
End Function
Function hhLastDte()
If DMax("row_date", "HH_CIB_Raw_Data") + 1 = Date Then
hhLastDte = 0
Else
hhLastDte = Date - 1
End If
End Function
【问题讨论】:
根据您的描述,我猜这两个函数对每条记录都运行,即使它们不必这样做,因为它们不使用任何记录特定参数。 是的,我只是偶然发现了您在这里所说的内容:allenbrowne.com/QueryPerfIssue.html 这些函数将只被调用一次,因为它们没有任何参数,因此如果您调整查询以替换具有固定值的函数,您将看到几乎相同的结果。但是,如果没有您的询问,您会让我们在野外猜测。可能是您错过了日期字段上的索引。 【参考方案1】:我已经根据上面 cmets 中的反馈找到了答案。该函数针对每一行数据运行,因此显着减慢了结果的返回速度。为了避免这种情况,我使用了内置函数 Dmax(分析表中的最大索引日期)和 Date 在 Access 查询条件部分创建了一个 between 语句:
Between DMax("row_date","HH_CIB_Raw_Data")+0 And Date()-1
现在追加查询能够根据表中缺失的最近日期动态提取数据,并在几秒钟内运行,而不是 2-3 分钟。 感谢所有输入的家伙!
【讨论】:
以上是关于MS Access 日期范围函数减慢查询速度的主要内容,如果未能解决你的问题,请参考以下文章