Я архивирую этот веб-форум, который обычно очищается примерно раз в неделю. Поэтому я проверяю это на экране и сохраняю в своей базе данных (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, так что я не совсем уверен, правильно ли это или просто как я делаю это неправильно?