mysql - 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
解决方案
在没有查询计划的情况下,我猜您的查询正在读取整个表两次。如果表确实有大量行,那么您无能为力(因为这个策略看起来已经是最优的了)。
覆盖索引可能会有所帮助,我会尝试以下方法:
create index ix1 on Studies (StudyID, TimeStamp);
推荐阅读
- reactjs - React > 如何在使用 react-table 添加新行后将焦点设置在输入字段上
- powershell - 通过纯批处理将远程文件下载到内存中
- recursion - Ocaml:将列表排序为等价类
- elasticsearch - 可以在 Elasticsearch 中组合查询和建议
- aspnetboilerplate - ABP 实施 gRPC 的最佳实践
- javascript - 如何在 Javascript/ES6 中使用过滤条件从一个数组中过滤两个数组来创建对象?
- java - 在 Intellij Idea 中使用“Runtime.getRuntime().exec”方法时如何设置 JAVA_HOME?
- spring-webflux - 什么时候在 webflux 中调用 webClient
- java - Maven忽略依赖包的签名
- android - EACCES(权限被拒绝)Android