如何解决MYSQL查询缓存中是否可能有“移动窗口”?
| 我有一个本地数据库,其中包含大约1GB的数据,这些数据与我制作的用于分析金融市场的软件一起使用。我从外部应用程序重复调用存储过程。该存储过程从“ 0”表中获取行,执行计算,然后将结果发送回应用程序。 每个查询从表中的数据调用表,该表位于设置大小(例如100,000rows
)的“窗口”内。随后的每个查询都将窗口移动1行并计算结果。
在这种情况下,能否以有用的方式使用“ 2”高速缓存?
为了提高速度,我目前仅是MEMORY
引擎,而不是MYISAM
或InnoDB
。
解决方法
根据您正在执行的聚合,可能的工作是选择所有结果并处理窗口客户端。
然后,客户端可以(用您的窗口大小替换1000):
读取前1000个结果并计算当前值。
从计算中减去第一个结果。
读取下一个结果并添加到计算中。
重复2和3,直到处理完所有结果。
这样,您无需在每次读取下一个值时都列举所有1000个结果,从而将算法从O(n ^ 2)更改为O(n)。
为了获得更好的读取效率,您可以使用固定长度循环缓冲区支持的队列来存储当前结果窗口。这将使您可以将缓冲区视为标准队列,但在添加/删除项目时无需重新调整后备数组中的元素。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。