选择当前的连续赢

sqxo8psd  于 2021-06-18  发布在  Mysql
关注(0)|答案(1)|浏览(368)

我现在用下面的查询来选择一个球员最近的连胜记录,这个查询效果很好,但在处理大量记录时,加载时间太长。

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

vzgqcmou

vzgqcmou1#

太棒了,谢谢草莓和维森,谢谢你的洞察力。我向表中添加了一个索引,并对select查询进行了一些调整。结果令人震惊。
以下是我使用的索引查询:

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

以下是修改后的select查询:

(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秒。
非常感谢:-)

相关问题