我有一个mySQL表格,其中每个条目代表玩家在特定扑克手中的表现。重要的栏目是玩家和网。我希望建立一个"高分"根据总奖金展示最佳玩家的页面,具有根据游戏类型,时间等进行过滤的能力。我通过以下查询实现了这一点:
SELECT player,sum(net) AS profit FROM hands GROUP BY player ORDER BY profit DESC
不幸的是,我有很多记录,迄今为止超过200万,这个查询非常慢。我在"播放器"上放了一个索引。但执行时间仍超过7秒。加速mySQL是否有任何希望,或者我必须以不同的方式构建此页面?如果是后者,有什么建议吗?
答案 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
表上的触发器添加一个保持最新的摘要表。