Как примечание, этот вопрос является расширением одного из моих предыдущих вопросов. Параметры изменились, поэтому мне нужен новый ответ.
У меня есть таблица MySQL, в которой есть четыре поля: post_id (уникальный int), user_id (int), категория (varchar), score (int).
Моя цель - получить два значения, одно из которых состоит в процентахсообщений пользователя в категории "х".Второй - сумма всех баллов в этой категории «х».Для этого я предположил, что мне нужно получить три значения из MySQL:
- SUM (
score
) GROUP BY category
- COUNT (
post_id
) GROUPBY category
- COUNT (
post_id
)
Так что это достаточно простой запрос для написания.Вот сложная часть: мне нужно получить 50 лучших пользователей, упорядоченных по некоторым подсчетам вроде (процент + сумма).Я предполагаю, что я мог бы написать запрос, который выполняет всю вышеприведенную математику в подзапросе / JOIN, а затем просто поместить ORDER BY и LIMIT в основной запрос, но это кажется неэффективным.Я планирую 2 миллиона пользователей, и каждый пользователь может иметь 5000 сообщений.Если бы я выполнял свой запрос таким образом (я думаю), потребовалось бы навсегда , чтобы выполнить каждую из этих записей.
Какой самый эффективный способ выполнить запрос, подобный этому?Я читал о представлениях MySQL, которые кажутся хорошей идеей, но я также читал, что у них огромные проблемы с производительностью.Стоит ли это?
Или это невозможно?Должен ли я соглашаться на работу CRON пару раз в день и просто хранить ложные числа в реальном времени?