我有两张桌子:
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
然后我可以做数学来确定百分比。
问题是查询经常超时——这意味着它需要一分钟多的时间才能完成。
有没有办法摆脱左连接或以其他方式优化查询?