MYSQL选择当前连续获胜

时间:2018-12-08 03:37:54

标签: mysql select sum max coalesce

我当前正在使用以下查询来选择最近获得连胜的玩家,而该查询在处理大量记录时加载时间太长的情况下效果很好。

select sum(id > coalesce((select max(id) from cc6_MensLeague_rounds p2 where p2.player = 1184 and p2.outcome = 1),0)) as current from cc6_MensLeague_rounds p where player = 1184 and outcome = 2;

我的问题是...有没有更有效的方法可以在更短的时间内返回相同的结果?

此查询的预期输出为

Current
6

我在以下位置设置了MySql小提琴: https://www.db-fiddle.com/f/nMKRZe4EAHwqh1wfmsUbrQ/0

1 个答案:

答案 0 :(得分:0)

太棒了,谢谢草莓和维森,您的见解。我在表中添加了索引,并对选择查询进行了一些调整。结果是惊人的。

这是我使用的索引查询:

ALTER TABLE `cc6_MensLeague_rounds` ADD INDEX `outcome` (`player`,`outcome`)

这是修改后的选择查询:

(select sum(id > coalesce((select max(id) from cc6_MensLeague_rounds p2 where (p2.player,p2.outcome) = (cc6_MensLeague_players.id,1)),0)) as current from cc6_MensLeague_rounds p where (player,outcome) = (cc6_MensLeague_players.id,2))

我的加载时间从66.21485秒减少到0.16173秒。

非常感谢:-)