0

我有一个这样的查询:

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 上作为多索引。而且我认为在 GamesRuns.count 上放置索引是没有意义的,因为它在 SUM 函数中,但除此之外(没有 SUM 函数)也应该有一个索引。这样对吗?因为当我使用 EXPLAIN 时,它告诉我 possible_key 和 key 是 PRIMARY,但 PRIMARY 只是 Games.id。谢谢您的回答。

4

2 回答 2

0

一般来说,如果可能的话,你会想要一个用于连接的任何东西的索引,以及在哪里使用的任何东西。

据我所知,MySql 不支持函数索引(我实际上并没有使用它),所以你不能在 SUM 函数上放置索引。如果我错了,有人会纠正我,我敢肯定

因此,对于您的示例,我会在 Games.id、GamesRuns.game_id、GamesRuns.date、Games.score、Games.active、Games.display 上放置一个索引

于 2012-07-24T14:19:32.923 回答
0

因为您在 where 和 group by 中使用了字段 games.id,所以该字段应该是好的。

还有字段gamesruns.game_id。

date、score 和 active 和 display 也是候选。但在这种情况下,你应该注意你有多少记录。因此,其余的取决于您,并取决于对数据的更深入研究。

一切顺利

于 2012-07-24T14:19:38.560 回答