MySQL - 使用索引的列

时间:2012-07-24 14:14:08

标签: mysql indexing

我有这样的查询:

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。谢谢你的回答。

2 个答案:

答案 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。

日期,分数,活动和显示也是候选人。但在这种情况下,你应该注意你有多少记录。所以其余的由您决定,并取决于对数据的深入研究。

一切顺利