Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/59.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MySQL有助于优化这一点-在记录的24小时内计算所有内容_Mysql - Fatal编程技术网

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

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

我可能完全错误地处理了这个问题,但是我如何才能最好地完成这个查询呢?我只想要每个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

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

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

create index ix1 on Studies (StudyID, TimeStamp);

关于优化的查询应该包括一个
EXPLAIN
输出和一个
showcreatetable
输出,用于SQLPlease中涉及的每个表。请发布执行计划。是的,以及所有相关表的showcreatetable语句,我们确实需要看到这个解释
create index ix1 on Studies (StudyID, TimeStamp);