gpt4 book ai didi

mysql 查询 - 为一个巨大的表优化现有的 MAX-MIN 查询

转载 作者:行者123 更新时间:2023-11-29 00:51:58 26 4
gpt4 key购买 nike

我有一个或多或少有效的查询(关于结果),但处理大约需要 45 秒。这对于在 GUI 中呈现数据来说肯定太长了。
所以我的需求是找到一个更快/更高效的查询(几毫秒左右会很好)我的数据表大约有 3000 ~2,619,395 个条目,并且还在增加。

架构:

num | station | fetchDate             | exportValue | error
1 | PS1 | 2010-10-01 07:05:17 | 300 | 0
2 | PS2 | 2010-10-01 07:05:19 | 297 | 0
923 | PS1 | 2011-11-13 14:45:47 | 82771 | 0

解释

  • exportValue 总是递增的
  • exportValue代表实际的绝对值
  • 在我的例子中有 10 个站点
  • 每 ~15 分钟向表中写入 10 个新条目
  • 错误只是正确工作站的指标

工作查询:

select
YEAR(fetchDate), station, Max(exportValue)-MIN(exportValue)
from
registros
where
exportValue > 0 and error = 0
group
by station, YEAR(fetchDate)
order
by YEAR(fetchDate), station

输出:

Year | station | Max-Min
2008 | PS1 | 24012
2008 | PS2 | 23709
2009 | PS1 | 28102
2009 | PS2 | 25098

我的看法:

  1. 使用诸如“2008-01-01 和 2008-01-02 之间”之类的语句编写多个查询以获取 MIN(exportValue) 并在 2008-12-30 和 2008-12-31 之间获取 MAX( exportValue) - 问题:查询次数多,指定时间范围内没有数据的问题(不保证一定有数据)
  2. 使用 order by MIN(fetchDate) 将结果集限制为我的 10 个站 - 问题:处理查询也需要很长时间

附加信息:
我在 JAVA 应用程序中使用查询。这意味着,如有必要,可以对结果集进行一些后处理。 (JPA 2.0)

非常感谢任何帮助/方法/想法。提前致谢。

最佳答案

添加合适的索引会有所帮助。2 个复合索引将显着加快速度:

ALTER TABLE tbl_name ADD INDEX (error, exportValue);
ALTER TABLE tbl_name ADD INDEX (station, fetchDate);

关于mysql 查询 - 为一个巨大的表优化现有的 MAX-MIN 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8119944/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com