我有这样的查询:
SELECT
`Games`.`id`, `Games`.`name`, `Games`.`url`
FROM
`Games`
LEFT JOIN
`GamesRuns`
ON
Games.id = GamesRuns.game_id
WHERE
(GamesRuns.date >= '2012-07-17 13:14:08') AND (Games.score = 0) AND (Games.active = 1) AND (Games.display = 1)
GROUP BY
`Games`.`id`
ORDER BY
SUM(GamesRuns.count) DESC
LIMIT 5;
我想问一下我应该把索引放在哪些列上。我认为它应该在GamesRuns.date和Games.score + Games.active + Games.display作为multiindex。而且我认为在GamesRuns.count上放一个索引是没有意义的,因为它在SUM函数中,但是否则(没有SUM函数)应该还有一个索引。这样对吗?因为当我使用EXPLAIN时,它会向我显示possible_key并且key也是PRIMARY,但PRIMARY只是Games.id。谢谢你的回答。
答案 0 :(得分:0)
一般来说,你想要一个用于连接的东西的索引,以及在可能的地方使用的任何东西。
据我所知,MySql不支持功能索引(我实际上并没有使用它)所以你不能在SUM函数上放置索引。如果我错了,有人会纠正我,我确定
因此,对于您的示例,我会在Games.id,GamesRuns.game_id,GamesRuns.date,Games.score,Games.active,Games.display
上添加索引。答案 1 :(得分:0)
因为你正在使用field games.id在where里面以及在group by中,所以这个字段应该是好的。
也是游戏gamesruns.game_id。
日期,分数,活动和显示也是候选人。但在这种情况下,你应该注意你有多少记录。所以其余的由您决定,并取决于对数据的深入研究。
一切顺利