У меня есть две таблицы:
poll_response (poll_id, option_id, user_id) (около 500 000 строк, с 500 уникальными опросами, 1000 уникальных опций и 25000 уникальных пользователей)
предпочитаемые_пользователи (user_id) (около 800 строк)
Я бы хотел определить, какой процент пользователей, которые выбирают каждыйопцией являются «привилегированные пользователи» (т.е. те, которые имеют высокую репутацию).Другие пользователи могут ответить на опрос;чтобы определить, что ответ пришел от предпочтительного пользователя, требуется соединение с таблицей Предпочитаемое_пользователя.
Вот что я получил:
SELECT option_id, count(*) AS all_votes, count(preferred_users.user_id) AS preferred_votes
FROM response
LEFT JOIN preferred_users ON response.user_id = preferred_users.user_id
GROUP BY option_id
Запрос выплевывает таблицунапример:
| option_id | all_votes | preferred_votes
| 1 | 500 | 150
| 2 | 550 | 250
| 3 | 525 | 300
Затем я могу выполнить математические расчеты, чтобы определить процент.
Проблема в том, что запрос часто прерывается - это значит, что для его завершения требуется более минуты.
Есть ли способ избавиться от левого соединения или иным образом оптимизировать запрос?