MySQL帮助优化这一点-在最低记录的24小时内计算所有内容

时间:2019-01-10 18:46:03

标签: mysql

enter image description here

我可能会遇到所有错误,但是如何最好地执行此查询?我只想要每个研究ID的最短时间戳后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    

1 个答案:

答案 0 :(得分:0)

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

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

create index ix1 on Studies (StudyID, TimeStamp);