【问题标题】:MYSQL Selecting Current Consecutive WinsMYSQL 选择当前连续获胜
【发布时间】:2018-12-08 03:37:53
【问题描述】:

我目前正在使用以下查询来选择最近连胜的球员,并且该查询效果很好,除了在处理大量记录时加载时间过长。

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

【问题讨论】:

  • 索引是你的朋友——特别是(我猜)(玩家、结果)的复合键
  • 谢谢 Strawberry,不太清楚该怎么做,能否请您详细说明一下主题或指出任何可能有用的好资源?
  • @YarnellArsenault 搜索 mysql create index 你会得到很多资源,包括在这个网站上——比如this one

标签: mysql select sum max coalesce


【解决方案1】:

太棒了,感谢 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 秒。

非常感谢:-)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-05-31
    • 2021-02-13
    • 1970-01-01
    • 2012-02-07
    • 1970-01-01
    • 2015-02-17
    • 1970-01-01
    相关资源
    最近更新 更多