我尝试列出发布文章最多的用户(或类似内容)。
所以我写了这样的话:
SELECT u.id, COUNT(a.id) AS articles
FROM users u
LEFT JOIN articles a ON a.user_id = u.id
GROUP BY u.id
ORDER BY articles DESC
LIMIT 10
'解释'命令显示它' 使用连接缓冲区(块嵌套循环)'和' 使用临时;使用filesort '。
获得结果需要花费很长时间。 我知道造成这个问题的原因。但我不知道如何解决它。
另外,我想根据用户的注册时间而不是发布的文章作为选项对记录进行排序。
我知道我可以在用户表格中添加一列来累积文章编号,但是我无法更改原始程序。
在我看来,这是制作清单的唯一方法。但也是在我的时间之前检索结果的不可能的方法。
还有另一种更快的方式来获得基于联接查询的前10名列表吗?
任何建议都将不胜感激。
答案 0 :(得分:0)
试试这个:
SELECT u.id, t.articles FROM USERS u LEFT JOIN ( SELECT user_id, COUNT(id) AS `articles` FROM articles GROUP BY user_id ) t ON u.id = t.user_id ORDER BY t.articles DESC LIMIT 10