我在下面有一个查询。
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
它运行得更快,但我需要此订单。
有什么想法吗? 提前谢谢。
答案 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)
上的索引有助于提升效果。