[英]How do I make this personal best highscore MySQL query more efficient?
我有一个游戏排行榜高分数据库,目前拥有约30.000个条目,下面的查询查找特定游戏和玩家的个人最佳高分,但执行该过程大约需要60秒 。 我在想应该有一种更有效的方法来执行此操作,也许使用复合索引,但是那是哪种呢?
SELECT name, score, date, version, mode, attempts, time, id
FROM highscore h1
WHERE score = (
SELECT MAX( score )
FROM highscore h2
WHERE name = h1.name && gamename = "asteroids" && name = "bob"
)
我目前有以下指标:
id
score
name
name-gamename (composite)
任何帮助是极大的赞赏!
我将使用标准SQL语法编写查询:
SELECT name, score, date, version, mode, attempts, time, id
FROM highscore h1
WHERE score = (SELECT MAX( score )
FROM highscore h2
WHERE h2.name = h1.name AND h2.gamename = 'asteroids' AND h2.name = 'bob'
);
为此,您需要一个综合索引: highscore(name, gamename, score)
。
如果你只是在寻找一个行(即使有关系),那么这可能是凌晨快一点:
SELECT name, score, date, version, mode, attempts, time, id
FROM highscore h
WHERE h.gamename = 'asteroids' AND h.name = 'bob'
ORDER BY score DESC
LIMIT 1;
适当的索引是highscore(name, gamename, score)
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.