首页 > 解决方案 > MySQL 帮助优化这一点 - 在 24 小时内计算所有内容

问题描述

在此处输入图像描述

我可能正在接近这一切都是错误的,但我怎样才能最好地做这个查询?我只想要每个 studyID 的最小时间戳的 1 天内的记录数。这个查询得到了我需要的答案,但它需要一百万条记录。子查询自己运行几秒钟,没有子查询的主查询几秒钟运行,但这运行速度非常慢......

SELECT st.StudyID,COUNT(*)
FROM Studies st
JOIN(SELECT StudyID,DATE_ADD(MIN(TimeStamp),INTERVAL 1440 MINUTE) AS MaxTime 
FROM Studies GROUP BY StudyID) AS d1
ON d1.StudyID = st.Study.ID
WHERE st.TimeStamp<=d1.MaxTime
GROUP BY st.StudyID

输出显然应该是这样的......

ID COUNT(*) 
2  3    
4  4    

标签: mysql

解决方案


在没有查询计划的情况下,我猜您的查询正在读取整个表两次。如果表确实有大量行,那么您无能为力(因为这个策略看起来已经是最优的了)。

覆盖索引可能会有所帮助,我会尝试以下方法:

create index ix1 on Studies (StudyID, TimeStamp);

推荐阅读