我們有一張表,它記錄了某些遊戲中用戶的分數。我們想要的是顯示每個遊戲的最高得分。請注意,每個用戶可能已經提交了1000多個分數,社區很大(因此用戶數量越來越多),並且有很多遊戲。 我們已經使用此查詢在一個類似的問題在這裏找到:Mysql - 有效地獲得給定ID的每個組的最大值
SELECT f1.userkey, f1.score, dateachieved, timeachieved, `MA_users`.username
FROM (
(
SELECT userkey, max(score) AS score
FROM `MA_scores`
WHERE gameid = '$gameid'
AND STATUS = 'approved'
GROUP BY userkey
) AS f1
JOIN (
SELECT userkey, score, dateachieved AS dateachieved, timeachieved AS timeachieved
FROM `MA_scores`
WHERE gameid = '$gameid'
AND STATUS = 'approved'
GROUP BY score DESC , userkey
ORDER BY `score` DESC
) AS T2
ON f1.userkey = T2.userkey
AND f1.score = T2.score
)
JOIN `MA_users` ON f1.userkey = `MA_users`.userkey
LIMIT 0 , 20;
上述的問題是,它需要一些時間才能完成,因此該網站是不是快速訪問(幾秒鐘的延遲) (因此我們已經看到來自mysql的CPU使用率爲50%)。 我們知道這是已知最大的每組問題,並在這裏閱讀了一些問題和一些博客文章,但他們似乎沒有提高查詢的速度。
所以問題是:是否有任何更有效的查詢來檢索所需的結果?而且,哪些索引應該與查詢一起使用,以便加快速度? (爲了避免使用filesort;使用臨時等等) 謝謝!
謝謝,我將它標記爲已接受,因爲沒有人回覆,因爲它是一個聰明的答案:),我想我可以擴展它更多以緩存它,並刪除緩存文件時,任何新的條目/更新發生在統計表:) – upeer