加快排名查询

时间:2014-12-05 01:01:44

标签: mysql

我有一个mySQL表格,其中每个条目代表玩家在特定扑克手中的表现。重要的栏目是玩家和网。我希望建立一个"高分"根据总奖金展示最佳玩家的页面,具有根据游戏类型,时间等进行过滤的能力。我通过以下查询实现了这一点:

SELECT player,sum(net) AS profit FROM hands GROUP BY player ORDER BY profit DESC

不幸的是,我有很多记录,迄今为止超过200万,这个查询非常慢。我在"播放器"上放了一个索引。但执行时间仍超过7秒。加速mySQL是否有任何希望,或者我必须以不同的方式构建此页面?如果是后者,有什么建议吗?

1 个答案:

答案 0 :(得分:1)

一种可能性是试试这个:

select p.*,
       (select sum(net) from hands h where h.player = p.player) as profit
from players p
order by profit desc;

然后,您需要hands(player, net)上的索引。这可能有助于将聚合移动到子查询中,以便更好地利用索引。

如果这不起作用,您可以减少正在考虑的球员数量 - 例如,只有过去一周比赛的球员。作为最后的替代方案,您可能需要更改表的结构。特别是,请考虑使用hands表上的触发器添加一个保持最新的摘要表。