【发布时间】:2013-06-09 21:14:05
【问题描述】:
场景:
我有一个网站,可以让用户在他们最喜欢的汽车之间进行投票。汽车保存在cars 表中,投票保存在votes 中,cars 表中的 country_id 列引用countries(汽车品牌来自哪里)。
我想向用户显示哪个国家的投票最多。表格的简单版本:
汽车
id
name
country_id
国家
id
name
投票
id
user_id
car_id
理想情况下,我想向用户展示前 x 个国家/地区。以及他们都有多少票。
奖励:是否可以将此查询用于某个用户?因此,他们会看到他们投票选择的国家/地区的前 x。
您建议使用哪些索引?投票表可以增长到超过 1000 万票,汽车表也可以快速增长。
【问题讨论】:
-
听起来
LEFT JOIN,GROUP BY,COUNT(*)可以实现你的目标,不是吗? -
如果在可预见的未来投票数将增长到数千万行,您必须汇总投票并将它们保存在某个地方。
-
@mzedeler 你的意思是我应该把投票的 country_id 保存在投票表中吗?
-
不 - 我会计算每个国家的选票并将它们保存在国家表中,并将每辆车的选票保存在汽车表中。请注意,这是多余的,但如果您有数百万行,那么您很可能会遇到性能问题而没有这样的事情。
-
@mzedeler 非常感谢,我明白你的意思。所以它可以做一个选择总和(投票)......加入国家?