我有一个相对简单的游戏。我需要帮助,我认为这个查询没有正确优化。需要帮助优化查询,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