私はこのウェブ フォーラムをアーカイブしていますが、通常は 1 週間に 1 回削除されます。だから私はそれをスクリーンスクレイピングし、データベース(PostgreSQL)に保存しています。
また、フォーラムが最もアクティブな時間帯など、ユーザーが楽しめるいくつかのグラフを使用して、データを少し分析します。
だから私は次のようにpostsテーブルを持っています:
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 秒、現時点で posts テーブルには約 300,000 行しかありません。
1 つの列だけでグループ化すると、0.5 秒しかかかりませんが、両方が必要です。
私はリレーショナル データベースと SQL にかなり慣れていないので、これが正しいかどうか、またはどのように間違っているのかよくわかりません。