Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/performance/5.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 在一段时间内汇总帖子|缓慢查询|临时订购_Mysql_Performance - Fatal编程技术网

Mysql 在一段时间内汇总帖子|缓慢查询|临时订购

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(

我对这个问题有很大的疑问。有超过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(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)