我有一个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
但是在40万行的表上,它需要1,28秒。
有更快查询的想法吗?谢谢!
答案 0 :(得分:2)
如果我理解正确,则您要编写如下查询:
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)
上建立索引。
答案 1 :(得分:0)
为了检查现有索引的行为,您可以运行https://docs.gradle.org/6.0/release-notes.html查询:
list
它将告诉您使用了哪些索引,如何使用它们,以及需要索引的WHERE条件,ORDER排序,JOIN条件(以及其他条件)。因此,您可以尝试添加一个新的文件来填充所有文件。
要对应用程序或网站进行更广泛的索引检查,可以启用EXPLAIN配置标志(不适用于生产环境)。