2015-10-01 37 views
1

我在我的网站有一个关注系统,它是一个在线游戏。 因此,在这个游戏中,一个玩家可以跟随另一个玩家建立联盟。mysql查询INDEX是否需要?

CREATE TABLE IF NOT EXISTS `follow` (
    `player` INT NOT NULL REFERENCES cadastro (`id`), 
    `follow` INT NOT NULL REFERENCES cadastro (`id`) 
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; 

player是谁在追随。 我的问题是,如果将来这个表包含大量的用户,我应该使用索引吗?我怎么用这个?

我在我的游戏做的是:

select `follow` from follow where player = $ 

因此指数应该是player?任何优化帮助?

回答

1

索引player肯定会加快您的查询,如果表变大。如果这是您打算在表上运行的唯一查询,那么我会索引player, follow,因此可以通过player搜索查询,然后从相同索引中检索follow的值,而无需为此访问表。

+0

只需添加呢? INDEX播放器('player'),INDEX跟随('follow') –

+0

@RickJoe否,这将创建两个单独的索引。我建议添加'INDEX(player,follow)'。或者更好 - “PRIMARY KEY(播放器,后续)”。 – Mureinik

+0

在,很好!所以如果我使用主键(播放器,按照)我不需要使用INDEX? –

0

当代表像这样的多对多关系时,最佳做法通常是在playerfollow上使主键成为多键。

0

因为你很可能需要通过这许多一对多映射两种方式去,你既需要:

PRIMARY KEY(player, follow), 
INDEX  (follow, player)