是否可以在MYSQL查询缓存中使用“移动窗口”?

时间:2011-05-25 12:48:21

标签: mysql sql database caching

我有一个大约1GB数据的本地数据库,我使用的软件用于分析金融市场。我从外部应用程序重复调用存储过程。此存储过程从MEMORY表中提取行,执行计算,并将结果发送回应用程序。

每个查询调用来自表的数据,该表位于设定大小的“窗口”内(例如100,000 rows)。每个后续查询都会将窗口移动1行并计算结果。

在这种情况下,是否可以以有用的方式使用MySQL缓存?

为了提高速度,我目前只是MEMORY引擎,而不是MYISAMInnoDB

1 个答案:

答案 0 :(得分:1)

根据您正在执行的聚合,可能有用的是选择所有结果并处理窗口客户端。

然后客户端可以(用窗口大小替换1000):

  1. 读取前1000个结果并计算当前值。
  2. 从计算中减去第一个结果。
  3. 阅读下一个结果并添加到计算中。
  4. 重复2& 3直到处理完所有结果。
  5. 这样,每次读取下一个值时都不需要枚举所有1000个结果,将算法从O(n ^ 2)更改为O(n)。

    为了在读取时获得更高的效率,您可以使用由固定长度循环缓冲区支持的队列来存储结果的当前窗口。这将允许您将缓冲区视为标准队列,但在添加/删除项目时无需重新混洗后备阵列中的元素。