当数据库较小时,该查询工作正常,但是现在数据库中有数百万行,我意识到我应该早点进行优化。它正在查看超过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/

10-10 10:55
查看更多