我有一個相對簡單的遊戲。我需要幫助,我認爲這個查詢沒有正確優化。需要幫助優化查詢,EXPLAIN說「使用臨時的,使用filesort」
我有一個標準的users
表。有一個expansions
表,其中包含有關遊戲中擴展的一般信息。每次用戶在擴展中擊敗一個級別時,會將一行添加到playlog
,表示他們的最終得分(因此首先,他們的擴展名在播放列表中有0行)。
EXPLAIN SELECT users.username, expansions.title, expansions.description,
COUNT(playlog.id) as levels_beaten
FROM users
INNER JOIN expansions
LEFT JOIN playlog ON users.id = playlog.user_id
AND expansions.id = playlog.expansions_id
WHERE users.id = 10
GROUP BY expansions.id
ORDER BY expansions.order_hint DESC
我有以下指標:
用戶id - primary, username - unique
擴展id - primary, order_hint - index
playlogexpansions_id - foreign, user_id - foreign
我參加了一個數據庫類一段時間回來,我記得使用臨時和filesorts被認爲是不好的,但我真的不記得如何糾正它,或者如果它在這種情況下也沒關係(如果我不選擇用戶名,它也會在Explain的第一行中顯示「Using Index」)
'INNER JOIN expansions' join _on what_? – wildplasser
@wildplasser:我爲此添加了一個ON,但我認爲它讓情況變得更糟:http://i.imgur.com/eNobnhd.jpg – y2k
我沒有看到它。請發佈** real **代碼。 downvoting ... – wildplasser