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 日期范围函数减慢查询速度的主要内容,如果未能解决你的问题,请参考以下文章

MS-Access 慢查询

MS Access 根据给定的日期范围选择查询字段

MS Access 直通查询 - 使用 ODBC 连接字符串时非常慢,手动选择数据源时速度快 - 问题出在哪里

MS-Access:对链接的 CSV 文件的慢查询

MS Access:从日期时间值返回特定日期的查询

MS Access 中通过 ODBC 连接 MS SQL 表的查询非常慢