此查询需要花费大量时间才能执行。我该如何优化它?
SELECT user, count(tweet) FROM tweet WHERE 1 = 1 GROUP BY user
我的数据库有这样的结构:
DATE | USER | TWEET | ID
我想要一个查询来查找每个用户的推文数量。 MYSQL数据库的大小约为3 GB。
答案 0 :(得分:1)
这是您的查询:
select user, count(tweet)
from tweet
where 1 = 1
group by user;
不幸的是,MySQL在group by
的优化方面可能不好。您可以尝试添加索引tweet(user)
并将count(tweet)
更改为count(*)
。另一种可能性是使用该索引并执行:
select u.user, (select count*) from tweet t where t.user = u.user)
from user u;
有时,在子查询中进行聚合会有所帮助,因为MySQL可以更好地利用具有相关子查询的索引。
最后,如果您需要同时为所有用户提供此信息,则可能需要触发器。如果您一次只需要一个用户,那么上述索引将非常有用。