提高计算 MS-Access 中大型数据集 7 天滚动平均值的查询的性能

Posted

技术标签:

【中文标题】提高计算 MS-Access 中大型数据集 7 天滚动平均值的查询的性能【英文标题】:Improve performance of a query calculating 7 day rolling averages over a large dataset in MS-Access 【发布时间】:2020-11-12 01:35:58 【问题描述】:

我有一个包含 300,000 条记录的大表,其中一个字段是仅日期字段,另一个字段是购买计数。我需要将每天的七个滚动日平均值(实际上是六个)运行到另一个表中。任何购买日期或数字都可以改变,所以我不能只使用现有数据。

我正在做的是从销售的第一天开始,通过 VBA 创建一个然后执行一个带有 dsum 的查询并更新汇总表,使初始查询看起来像...

  Select dsum(purchases)/7 from purchases as rollingAvg7 where purchaseDate between #01/11/2020# and #07/11/2020#

运行这些查询每个大约需要两分钟。请问有没有更好更快的方法?

【问题讨论】:

尝试用 sum() 替换 dsum() 【参考方案1】:

首先,日期值的字符串表达式不能采用 dd/mm/yyyy 格式。使用适用于任何地方的ISO 序列,包括 ADO。

接下来,如果购买是每天的总数,则可以直接使用 Avg 找到平均值:

select avg(purchases)
from purchases as rollingAvg7 
where purchaseDate between #2020/11/01# and #2020/11/07#

如果您有个人购买 - 每天返回超过一条记录 - 使用 sum / 7

【讨论】:

当然购买日期的索引也会有所帮助! 谢谢 Gustav 和 @AlbertD.Kallal 索引丢失(我没有先检查所有索引的错误)并且仅添加日期索引将过程从六到八分钟减少到大约 20-30秒! SQL 也更加合乎逻辑,并且也改变了这一点。

以上是关于提高计算 MS-Access 中大型数据集 7 天滚动平均值的查询的性能的主要内容,如果未能解决你的问题,请参考以下文章

Python Pandas 改进了目前需要约 400 分钟运行的大型数据集的计算时间

从大型 MS-Access 数据库迁移到新平台

使用数据透视表关系提高大型数据集的性能(使用 Laravel)

这招可以让Pandas 数据帧处理速度提高400倍!

Javascript / D3.js - 绘制大型数据集 - 提高 d3.js 绘制的 svg 图表中的缩放和平移速度

ms-access 2007 运行时和 lockWindowUpdate