我有一个大约1GB数据的本地数据库,我使用的软件用于分析金融市场。我从外部应用程序重复调用存储过程。此存储过程从MEMORY
表中提取行,执行计算,并将结果发送回应用程序。
每个查询调用来自表的数据,该表位于设定大小的“窗口”内(例如100,000 rows
)。每个后续查询都会将窗口移动1行并计算结果。
在这种情况下,是否可以以有用的方式使用MySQL
缓存?
为了提高速度,我目前只是MEMORY
引擎,而不是MYISAM
或InnoDB
。
答案 0 :(得分:1)
根据您正在执行的聚合,可能有用的是选择所有结果并处理窗口客户端。
然后客户端可以(用窗口大小替换1000):
这样,每次读取下一个值时都不需要枚举所有1000个结果,将算法从O(n ^ 2)更改为O(n)。
为了在读取时获得更高的效率,您可以使用由固定长度循环缓冲区支持的队列来存储结果的当前窗口。这将允许您将缓冲区视为标准队列,但在添加/删除项目时无需重新混洗后备阵列中的元素。