我有三个表:users(id)、projects(id\u project、owner\u id)和followers(repo\u id、user\u id)。我想数一数有多少追随者一个项目。我想返回所有的用户项目,有没有追随者。
其中:id=owner\u id=user\u id\u project=repo\u id
我在查询中报告了1000多个用户。我做到了:
rs = dbSendQuery(mydb, "select p.id_project, p.owner_id, count(f.user_id) from users u left outer join projects p on p.owner_id = u.id and u.id in (123, 526, 852) left outer join followers f on p.id_project = f.repo_id group by p.id;")
查询太慢。有没有人能给我一些建议,让我的查询更快一些?我做错什么了吗?
也许,我可以分为两个查询,但是如何得到第一个查询的结果(即用户的项目)并在r中添加第二个查询(其中我将有项目的关注者的数量)?
我正在使用r和mysql。
你好,塔西亚娜
1条答案
按热度按时间xjreopfe1#
有时切换到相关子查询可以加快此类查询的速度:
对于这个查询,您需要索引
users(id)
,projects(owner_id, id_project)
,和followers(repo_id, user_id)
.我注意到你没有真正使用
users
table。所以,这应该是你想要的:在这个查询上应该使用相同的索引,尽管
users
显然不需要。其次,在mysql中,相关子查询有时比聚合查询快。所以,你可以试试: