我正在归档这个网络论坛,它通常每周会被清除一次。所以我在屏幕上抓取它,并将它存储到我的数据库(PostgreSQL)中。
我还对数据进行了一些分析,提供了一些供用户欣赏的图表,例如一天中什么时间论坛最活跃等等。
所以我有一个帖子表,如下所示:
Column | Type
------------+------------------------------
id | integer
body | text
created_at | timestamp without time zone
topic_id | integer
user_name | text
user_id | integer
我现在想为我的前 10 名小海报表中的每个用户计算帖子数。
我想出了这个:
SELECT user_id, user_name, count(*)
FROM posts
GROUP BY user_id, user_name
ORDER BY count DESC LIMIT 10
事实证明这很慢。9 秒,此时帖子表中只有大约 300 000 行。
如果我只在一个列上分组,它只需要半秒钟,但我需要两者。
我对关系数据库和 SQL 比较陌生,所以我不太确定这是否正确,或者我做错了什么?