我可能会遇到所有错误,但是如何最好地执行此查询?我只想要每个研究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
答案 0 :(得分:0)
在没有查询计划的情况下,我想您的查询将读取整个表两次。如果表确实有大量的行,那么您就无能为力了(因为这种策略看起来已经很理想了)。
覆盖索引可能会有所帮助,我会尝试以下操作:
create index ix1 on Studies (StudyID, TimeStamp);