首页 > 解决方案 > 获得最后评论文章的最佳查询是什么?

问题描述

我有一张comment像这样的桌子:

id  article_id    approved  created_at
7   104506        1         2019-12-02 09:36:32
6   104452        0         2019-12-02 09:31:35   
5   104498        1         2019-12-02 09:27:56
4   104506        1         2019-12-02 09:05:45
3   104511        1         2019-12-02 08:58:56
2   104501        1         2019-12-02 08:52:57
1   104552        1         2019-12-02 08:50:10

我想要什么:

104506
104498
104511
104501
104552

我想通过 created_at desc 获得一个不同的 article_id 批准订单列表

所以我只是这样做: SELECT article_id FROM comment WHERE approved = 1 GROUP BY article_id ORDER BY created_at DESC LIMIT 30

但是在 400k 行的表上,它需要 1.28 秒。

任何想法有一个更快的查询?谢谢!

标签: mysqlsqlperformancegreatest-n-per-group

解决方案


如果我理解正确,您想这样编写查询:

SELECT article_id
FROM comment
WHERE approved = 1
GROUP BY article_id
ORDER BY MAX(created_at) DESC
LIMIT 30;

为此,您需要一个关于comment(approved, article_id, created_at).


推荐阅读