【发布时间】:2023-04-08 22:36:01
【问题描述】:
我有这张高分表
CREATE TABLE IF NOT EXISTS高分(盖int(11) NOT NULL,用户名varchar(50) NOT NULL,用户IDint(6) NOT NULL,得分int(16) NOT NULL,dateaddedtimestamp NOT NULL default CURRENT_TIMESTAMP, PRIMARY KEY (盖,用户名), KEY得分(盖,得分) ) ENGINE=MyISAM DEFAULT CHARSET=latin1;
它有超过 200 万行。当我运行以下查询时,大约需要 4.5 秒。我希望这里有人对如何通过更改查询、添加/修改索引或更改存储引擎来提高速度有一些建议?
选择 h.userid,h.username AS user ,count(h.username) AS scorecount 从 高分 h INNER JOIN (select lid, min(score) AS maxscore FROM highscores group by lid) t on h.lid = t.lid and h.score = t.maxscore 按 h.username 分组 ORDER BY scorecount DESC
这里的要求是解释:
【问题讨论】:
-
你为什么有
min(score) AS maxscore?这会导致所谓的“认知失调”。您正在调用最小值。 -
首先查看
EXPLAIN告诉您的有关您的声明的内容…… -
我有 min(score) AS maxscore 因为我重用了另一个游戏中的查询,分数越高越好。只是我的懒惰/疏忽。为了清楚起见,我会改变它。
标签: mysql optimization