mysql - MYSQL查询缓存中是否可能有 "moving window"?

标签 mysql sql database caching

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

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

在这种情况下是否可以有效地使用MySQL缓存?

出于速度考虑,我目前仅使用 MEMORY 引擎,而不是 MYISAMInnoDB

最佳答案

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

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

  1. 读取前 1000 个结果并计算当前值。
  2. 从计算中减去第一个结果。
  3. 读取下一个结果并添加到计算中。
  4. 重复 2 和 3,直到处理完所有结果。

这样,您就不需要每次读取下一个值时都枚举所有 1000 个结果,从而将算法从 O(n^2) 更改为 O(n)。

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

关于mysql - MYSQL查询缓存中是否可能有 "moving window"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6124702/

相关文章:

java - Derby DB - 在 Java 中将 String 保存为 CLOB 时要转义的字符列表

Python 数据库小部件/环境,如 MSAccess

MySQL 查询有任何问题吗?

php - 通过 SQL 注入(inject)从数据库中提取信息

Mysql View 在表为空时返回数据

c# - 循环中的 Sql 请求会减慢 C# 应用程序的速度

php - 不将整个表下载为 .csv 文件仅导出 10 条记录(laravel 5.3)

php - INSERT DELAYED 与 PHP/MySQL 中的 write-behind

python - SQLAlchemy 与连接 (python)

ios - 类 'NSManagedObject' 的 NSManagedObject 必须具有有效的 NSEntityDescription