Mysql 在一段时间内汇总帖子|缓慢查询|临时订购
我对这个问题有很大的疑问。有超过50k个条目时,它会慢到几秒钟。这里的问题似乎是“分组”。这个问题也存在于不同的服务器上Mysql 在一段时间内汇总帖子|缓慢查询|临时订购,mysql,performance,Mysql,Performance,我对这个问题有很大的疑问。有超过50k个条目时,它会慢到几秒钟。这里的问题似乎是“分组”。这个问题也存在于不同的服务器上 SELECT FLOOR((UNIX_TIMESTAMP(CURDATE()) - UNIX_TIMESTAMP(FROM_UNIXTIME(post_date, '%Y-%m-%d'))) / 86400) AS arrIndex, count(post_id) AS qty FROM xf_post WHERE user_id = 1 AND FROM_UNIXTIME(
SELECT FLOOR((UNIX_TIMESTAMP(CURDATE()) - UNIX_TIMESTAMP(FROM_UNIXTIME(post_date, '%Y-%m-%d'))) / 86400) AS arrIndex,
count(post_id) AS qty
FROM xf_post
WHERE user_id = 1
AND FROM_UNIXTIME(post_date, '%Y-%m-%d') > CURDATE() - INTERVAL 1 MONTH
GROUP BY arrIndex
索引存在于“post_date”和“user_id”上。查询的意义:应该统计某个时间段的所有贡献。post_date字段作为时间戳提供
可以优化查询吗?
谢谢你的建议
Using where; Using temporary; Using filesort
并按此顺序创建一个复合索引(首先是=
,最后是“范围”):
(请注意,我将
更改为=
)楼层((UNIX\u时间戳(CURDATE())-UNIX\u时间戳(FROM\u UNIXTIME(post\u date,'%Y-%m-%d'))/86400)
-为什么这么复杂?使用时间差(DAY,CURRENT\u date,FROM\u UNIXTIME(post\u date))
。查询是否可以优化?当前状态下否。但您可以将生成的列添加为(日期(FROM UNIXTIME(post\u DATE))
,对其进行索引并用于筛选和分组。
SELECT DATE(post_date),
COUNT(*) AS qty
FROM xf_post
WHERE user_id = 1
AND post_date >= CURDATE() - INTERVAL 1 MONTH
GROUP BY arrIndex
INDEX(user_id, post_date)