私は2つのテーブルを持っています:
poll_response (poll_id, option_id, user_id) (約 500,000 行、500 の一意のポーリング、1000 の一意のオプション、および 25000 の一意のユーザー)
preferred_users (user_id) (約800行)
各オプションを選択したユーザーの何パーセントが「優先ユーザー」(つまり、評判の高いユーザー) であるかを判断したいと思います。他のユーザーは投票に応答できます。応答が優先ユーザーからのものであることを識別するために、preferred_users テーブルへの結合が必要です。
これが私が持っているものです:
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
次に、計算を行ってパーセンテージを決定します。
問題は、クエリが頻繁にタイムアウトになることです。つまり、完了するまでに 1 分以上かかるということです。
左結合を取り除くか、クエリを最適化する方法はありますか?