2015-10-01 63 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)