如何优化这个MySQL查询

Jam*_*son 5 mysql sql query-optimization

当数据库很小时,这个查询工作正常,但是现在数据库中有数百万行,我意识到我应该先考虑优化它.它正在查看超过600,000行并且正在使用where; 使用临时; 使用filesort(导致执行时间为5-10秒).它正在使用字段'battle_type'上的索引.

SELECT username, SUM( outcome ) AS wins, COUNT( * ) - SUM( outcome ) AS losses
FROM tblBattleHistory
WHERE battle_type =  '0' && outcome <  '2'
GROUP BY username
ORDER BY wins DESC , losses ASC , username ASC 
LIMIT 0 , 50
Run Code Online (Sandbox Code Playgroud)

Gil*_*anc 5

看来你需要索引username, battle_type, outcomeusername, outcome, battle_type.


Eri*_*lje 3

首先要确保您有良好的索引(正如其他人提到的)。

但是,您似乎正在为网页创建某种排行榜。我的第一个问题是 - 你真的需要实时执行这个查询吗?您能否在数据库中创建一个包含此查询结果的表(或向用户表添加胜负列),并定期刷新它?