【问题标题】:mysql query INDEX is needed?需要mysql查询INDEX吗?
【发布时间】:2015-10-01 22:43:44
【问题描述】:

我的网站上有一个关注系统,它是一个在线游戏。 所以,在这个游戏中,一个玩家可以跟随另一个玩家结盟。

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?有什么优化帮助吗?

【问题讨论】:

    标签: mysql select indexing database-administration


    【解决方案1】:

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

    【讨论】:

    • 只添加这个? INDEX 播放器 (player),INDEX 关注 (follow)
    • @RickJoe 不,这将创建两个单独的索引。我建议添加INDEX(player, follow)。或者更好 - PRIMARY KEY(player, follow).
    • 打开,很好!所以如果我使用主键(播放器,跟随)我不需要使用索引?
    • @RickJoe 不,你没有。一个主键(以及一个唯一约束,顺便说一句),隐式创建索引。
    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

      由于您可能需要双向执行这种多对多映射,因此您需要两者:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2013-06-12
        • 2016-02-02
        • 2014-03-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多