我目前在使用 group by 和 order by 时遇到查询速度极慢的情况。我倾向于不使用索引,因为 group by 位于单独的列上,然后 order by
Foo 表结构
id -> pk (indexed)
bar_id -> foreign key (indexed)
data -> varchar
created_at -> timestamp (indexed)
这是查询:
SELECT * FROM foo GROUP BY bar_id ORDER BY created_at DESC
我基本上试图获取每个 bar_id 的最新记录。然而,这最多需要 11 秒才能完成。有没有更好的方法来执行此类查询?
最佳答案
SELECT COUNT(*) FROM foo;
+----------+
| COUNT(*) |
+----------+
| 98304 |
+----------+
1 row in set (0.03 sec)
SELECT x.*
FROM foo x
JOIN
( SELECT bar_id
, MAX(created_at) max_created_at
FROM foo
GROUP
BY bar_id
) y
ON y.bar_id = x.bar_id
AND y.max_created_at = x.created_at;
531 rows in set (0.01 sec)
注意:我稍微修改了您的架构。 http://sqlfiddle.com/#!2/a6296/2
关于mysql - 如何使用order by优化mysql group by,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24391026/