在两列上使用COUNT和GROUP BY进行极慢的SQL查询

Luk*_*uka 4 sql database rdbms relational

我正在存档这个网络论坛,通常每周清理一次.所以我屏幕抓取它,并将其存储到我的数据库(PostgreSQL).

我还对数据进行了一些分析,其中有一些图表供用户欣赏,比如论坛最活跃的时间,等等.

所以我有一个帖子表,如下:

   Column   |            Type
------------+------------------------------
 id         | integer
 body       | text
 created_at | timestamp without time zone
 topic_id   | integer
 user_name  | text
 user_id    | integer
Run Code Online (Sandbox Code Playgroud)

我现在想要为每个用户提供一个帖子计数,用于我的小十大海报表.

我想出了这个:

SELECT user_id, user_name, count(*)
FROM posts
GROUP BY user_id, user_name
ORDER BY count DESC LIMIT 10
Run Code Online (Sandbox Code Playgroud)

结果证明非常慢.9秒,目前在帖子表中只有大约30万行.

如果我只分组一列,它只需要半秒钟,但我需要两个.

我对关系数据库和SQL很新,所以我不太确定这是不对的,或者我怎么做错了?

And*_*mar 11

可能只有一个用户具有特定ID,因此max(user_name)应该相同user_name.然后,您可以对单个列进行分组,您的帖子表明其工作速度更快:

SELECT user_id, max(user_name), count(*)
FROM posts
GROUP BY user_id
Run Code Online (Sandbox Code Playgroud)