当数据库较小时,该查询工作正常,但是现在数据库中有数百万行,我意识到我应该早点进行优化。它正在查看超过600,000行,并且正在使用何处;使用临时的;使用文件排序(这将导致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
最佳答案
首先是要确保您拥有良好的索引(如其他人所提到的)。
但是,您似乎正在为网页创建某种排行榜。我的第一个问题是-您是否真的需要实时执行此查询?您能否在数据库中创建带有查询结果的表(或在用户表中添加损益表),并简单地定期刷新它?
关于sql - 如何优化此MySQL查询,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2923298/