任何使用JOIN GROUP和ORDER BY优化MySQL查询的想法

时间:2017-09-13 01:38:46

标签: mysql sql

我在下面有一个查询。

SELECT `user`.id, title, something, SUM(cnt) AS `total`, 
FROM `user` 
LEFT JOIN `stat_per_day` ON stat_per_day.user_id = user.id  
WHERE CAST(stat_per_day.created_at AS DATE) BETWEEN '2017-08-12' and '2017-09-12'
GROUP BY `user`.`id` 
ORDER BY `total` DESC 
LIMIT 250;

两张桌子都有约。 500k记录。

stat_per_day结构:

id | created_at | user_id | cnt

我正在尝试使用索引,但速度不快。 问题是我需要接收任何时期的有序数据。 此外,如果我删除ORDER BY它运行得更快,但我需要此订单。

有什么想法吗? 提前谢谢。

1 个答案:

答案 0 :(得分:0)

以下内容可能会有所帮助:

SELECT u.id, u.title, u.something,
       (SELECT SUM(spd.cnt)
        FROM stat_per_day spd
        WHERE spd.user_id = u.id AND
              spd.created_at >= '2017-08-12' AND
              spd.created_at < '2017-09-13'
       ) AS total
FROM `user` u
ORDER BY total DESC 
LIMIT 250;

stat_per_day(user_id, created_at, cnt)上的索引有助于提升效果。