我有一个包含大约 1GB 数据的本地数据库,我将其与我制作的用于分析金融市场的软件一起使用。我从外部应用程序重复调用存储过程。此存储过程从 MEMORY
表中获取行,执行计算,然后将结果发送回应用程序。
每个查询都会从位于设定大小(例如 100,000 行
)的“窗口”内的表中调用数据。每个后续查询都会将窗口移动 1 行并计算结果。
在这种情况下是否可以有效地使用MySQL
缓存?
出于速度考虑,我目前仅使用 MEMORY
引擎,而不是 MYISAM
或 InnoDB
。
最佳答案
根据您正在执行的聚合,可能有效的方法是选择所有结果并处理窗口客户端。
然后客户端可以(用您的窗口大小替换 1000):
- 读取前 1000 个结果并计算当前值。
- 从计算中减去第一个结果。
- 读取下一个结果并添加到计算中。
- 重复 2 和 3,直到处理完所有结果。
这样,您就不需要每次读取下一个值时都枚举所有 1000 个结果,从而将算法从 O(n^2) 更改为 O(n)。
为了在读取时获得更高的效率,您可以使用由固定长度循环缓冲区支持的队列来存储当前结果窗口。这将允许您将缓冲区视为标准队列,但在添加/删除项目时无需重新排列后备数组中的元素。
关于mysql - MYSQL查询缓存中是否可能有 "moving window"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6124702/