MySQL有助于优化这一点-在记录的24小时内计算所有内容
我可能完全错误地处理了这个问题,但是我如何才能最好地完成这个查询呢?我只想要每个studyID的最小时间戳后1天内的记录数。这个查询得到了我所需要的答案,但它永远需要一百万条记录。子查询本身在几秒钟内运行,没有子查询的主查询在几秒钟内运行,但运行速度非常慢MySQL有助于优化这一点-在记录的24小时内计算所有内容,mysql,Mysql,我可能完全错误地处理了这个问题,但是我如何才能最好地完成这个查询呢?我只想要每个studyID的最小时间戳后1天内的记录数。这个查询得到了我所需要的答案,但它永远需要一百万条记录。子查询本身在几秒钟内运行,没有子查询的主查询在几秒钟内运行,但运行速度非常慢 SELECT st.StudyID,COUNT(*) FROM Studies st JOIN(SELECT StudyID,DATE_ADD(MIN(TimeStamp),INTERVAL 1440 MINUTE) AS MaxTime
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
如果没有查询计划,我猜您的查询将读取整个表两次。如果表确实有大量的行,那么您对此无能为力(因为此策略看起来已经是最优的) 覆盖索引可能会有所帮助,我会尝试以下方法:
create index ix1 on Studies (StudyID, TimeStamp);
关于优化的查询应该包括一个
EXPLAIN
输出和一个showcreatetable
输出,用于SQLPlease中涉及的每个表。请发布执行计划。是的,以及所有相关表的showcreatetable语句,我们确实需要看到这个解释
create index ix1 on Studies (StudyID, TimeStamp);