作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在获取每月统计数据的分析,但我的查询似乎很慢我对 mysql 不是很好,我不确定最好的方法是什么,也许这是正确的。在 StackOverflow 上搜索后,我发现我认为这是获取数据的最佳方式。
我需要在一个月内获取每天的统计数据/统计数据,我有一张表格用于一个月中的每一天,就像这样。
我正在像这样对我的统计表运行查询。
SELECT day, (SELECT COUNT(*) FROM stats WHERE DAYOFMONTH( stats.timestamp ) = DW.day_id AND MONTH( stats.timestamp ) = MONTH(CURDATE()) AND YEAR( stats.timestamp ) = YEAR(CURDATE()) AND stats.user_id = 1) AS taly FROM daysoffthemonth DW
这是该查询的输出。
这行得通,但如上所述,它开始变得非常慢,尤其是现在我的统计表开始填充大量数据。
是否希望获得有关最佳实践的任何建议?
谢谢
评论中建议的查询结果。
最佳答案
你应该避免子查询插入列结果..
尝试使用连接而不是子查询
SELECT DW.day, ifnull(COUNT(*),0) taly
FROM daysoffthemonth DW
LEFT JOIN stats ON DAYOFMONTH( stats.timestamp ) = DW.day_id
AND AND MONTH( stats.timestamp ) = MONTH(CURDATE())
AND AND YEAR( stats.timestamp ) = YEAR(CURDATE())
AND stats.user_id = 1
GROUP BY DW.day
或避免 1
select DW.day, ifnull(t.my_count,0) taly
from daysoffthemonth DW
left join (
select DAYOFMONTH( stats.timestamp ) day , COUNT(*) my_count
from stats
where MONTH( stats.timestamp ) = MONTH(CURDATE())
AND YEAR( stats.timestamp )= YEAR(CURDATE())
group by DAYOFMONTH( stats.timestamp ) ) t on DW.day = t.day
关于mysql - 加速sql查询获取月度数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48962554/
可实现类似于sql中的dateadd、datesub的功能 两种获取日期的方式 ?
我是一名优秀的程序员,十分优秀!