我有一个相对简单的游戏。我需要帮助我认为此查询未正确优化。
我有一张标准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
播放日志 expansions_id - foreign, user_id - foreign
不久前我上了一个数据库类,我记得使用临时和文件排序应该是坏的,但我真的不记得如何纠正它或者在这种情况下是否可以(另外,如果我不选择用户名,它在解释的第一行也说“使用索引”)