Запрос из лучших игроков месяца


В веб-игре существует рейтинг Лучшие моменты игры играл месяца:

// QUERY
SELECT * FROM game
WHERE date >= date_sub(CURDATE(),INTERVAL 1 MONTH)
ORDER BY points DESC limit 0, 20

Но, в этом случае один игрок может быть в топ 1,2,3... поэтому я изменил запрос, чтобы добавить в атмосферу, а затем появляется только в одной игре для игрока (игра с максимум баллов):

// Query that filters player names
SELECT g.*
FROM game g
INNER JOIN ( SELECT playerName, MAX(points) AS MaxPoints
             FROM game
             GROUP BY playerName
           ) groupGame
        ON g.playerName = groupGame.playerName AND g.points = groupGame.MaxPoints 
WHERE date >= date_sub(CURDATE(),INTERVAL 1 MONTH)
ORDER BY points DESC limit 0, 20

Запрос работает нормально, но второй запрос выполняется гораздо медленнее, чем первый. Есть ли способ, чтобы оптимизировать его?



284
2
задан 4 июля 2011 в 07:07 Источник Поделиться
Комментарии
1 ответ

Вы будете иметь, чтобы проверить производительность, но группы должны помочь:

SELECT playerName, MAX(points) AS points /*[, other columns]*/
FROM game
WHERE date >= date_sub(CURDATE(),INTERVAL 1 MONTH)
GROUP BY playerName /*[, other columns]*/
ORDER BY points DESC
LIMIT 0, 20

3
ответ дан 4 июля 2011 в 08:07 Источник Поделиться