MYSQL选择当前连续获胜

标签 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 fiddle : https://www.db-fiddle.com/f/nMKRZe4EAHwqh1wfmsUbrQ/0

最佳答案

太棒了,谢谢 Strawberry 和 Vason 的见解。我向表添加了索引并对选择查询做了一些调整。结果是惊人的。

这是我使用的索引查询:

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 秒。

非常感谢:-)

关于MYSQL选择当前连续获胜,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53679270/

相关文章:

php - 如何统计变量值是否重复?

mysql - 当该类别的任务插入到任务表中时,我想增加该类别的任务计数

jquery - 如何使用动态ID获取多选选项值?

mysql - 是否可以依次插入然后选择插入的行?

java - 如果重复出现,则在 while 循环中将列值相加

mysql - 当值之间的差距大于 x 时如何计算出现次数

C# 日期时间运算符 +=

mysql - Mysql Json 列中的增量 JSON 字段导致浮点而不是整数

mysql - 将 Rollup 与 ORDER BY 结合使用时出现的问题

mysql - 具有两个不同表和条件的 SELECT sql 语句