MySQL - 索引优化 - 与游戏相关的用户

时间:2012-04-30 17:29:49

标签: mysql optimization indexing

我有一个名为games的表(由int独特)。

我有一个名为members的表(用户名唯一)。

在每场比赛中,一次最多可以有6名成员参与。

然而,会员可以从游戏中退出 - 但我仍然需要保留他们参与该游戏的记录。

我需要进行以下单独搜索:

  1. 会员的有效游戏。

  2. 会员退出游戏。

  3. 在游戏中搜索空位(即未由成员填充的位置)。

  4. 最好的表格结构是什么? 我是否应该为一个成员添加一个文本字段,其中包含以逗号分隔的所有已退出游戏的列表? (我可以看到的一个问题是我最终需要这些游戏的游戏信息,所以我随后需要在游戏桌上为这些游戏编号单独搜索。这对于服务器而言似乎真的很慢。 )

    在游戏中,我应该有6个文本字段,例如SLOT1,SLOT2等与当前玩家的用户名?但是,再一次,辞职的成员呢?

    现在是我的问题的主要部分(导致上述所有混淆):

    如何在表格上设置索引?

    当我进行搜索时,我会查看看SLOTS1等的游戏,看看是否与玩家的用户名有任何匹配。所以这是一次6次ORed搜索。如何针对这些操作优化数据库的索引?

    然后根据每个游戏的辞职成员的方式,我该如何做一个索引呢?

1 个答案:

答案 0 :(得分:1)

使用交叉引用表。这是一个包含三列的表,game(表games的外键),user(表users的外键)和player_number (1到6之间的可空整数,表示玩家占用哪个“座位”; null表示玩家已辞职)。 (这可能会有所不同,具体取决于你的游戏如何运作以及你希望东西如何组合在一起,但主要的是你有gamesusers的外键。)

上述建议中的主键在您方便时为(game, user, player_number)(user, game, player_number)

搜索这样的交叉引用表要比在六列中进行ORing的查询要容易得多(对你和你的数据库来说)。

根据@Jermin Bazazian的建议,切换到users表的整数主键可能是个好主意。