MySQL-索引优化-与游戏相关的用户
我有一个名为games的表(通过int唯一) 我有一个名为members(用户名唯一)的表 在每个游戏中,一次最多可参与6名成员 然而,一名成员可以退出游戏,但我仍然需要保留他们参与该游戏的记录 我需要进行以下单独搜索:MySQL-索引优化-与游戏相关的用户,mysql,optimization,indexing,Mysql,Optimization,Indexing,我有一个名为games的表(通过int唯一) 我有一个名为members(用户名唯一)的表 在每个游戏中,一次最多可参与6名成员 然而,一名成员可以退出游戏,但我仍然需要保留他们参与该游戏的记录 我需要进行以下单独搜索: 会员的活动游戏 为会员辞职 在游戏中搜索一个空的位置(即一个未被成员填满的位置) 这张桌子的最佳结构是什么? 我是否应该为一个成员输入一个文本字段,并用逗号分隔所有已辞职游戏的列表?(我看到的一个问题是,我最终需要这些游戏的游戏信息,因此我随后需要在游戏表中单独搜索每个游戏编号
然后,根据我如何为每一场游戏分配辞职成员,我如何编制索引?使用交叉引用表。这是一个有三列的表,
game
(表games
)的外键,user
(表users
的外键)和player\u number
(1到6之间的可空整数,表示玩家占用了哪个“座位”;null表示玩家辞职)。(这可能会有所不同,具体取决于您的游戏工作方式以及您希望内容如何组合在一起,但最主要的是您有游戏
和用户
的外键)
上述建议中的主键是(游戏、用户、玩家号)
或(用户、游戏、玩家号)
像这样搜索交叉引用表(对您和数据库来说)要比执行涉及跨六列ORing的查询容易得多
根据@Jermin Bazazian的建议,切换到
users
表的整数主键可能是一个好主意。如果您开始为您的成员使用整数主键(而不是用户名,用户名很可能是字符串)如何?我可以看出这将有助于在SLOTS1中只需要一个int,等等,这样搜索起来可能会更快。然而,仅仅这样做肯定不会解决索引的主要问题。当然,这不是解决方案,但肯定是一个需要解决的重要问题。您可以看到,主键是否独立于数据很重要。如果一个成员因为任何原因改变了他的用户名,那么整个索引都应该重新排列,这在一个大数据库中是一个很大的负担。所以这不仅仅是字符串对整数的问题。谢谢Jermin。我明白你的意思。立即更新我的成员表。以前从未听说过外键。把它们读出来。它们听起来很棒。顺便说一下,如果我有外键,它会自动作为快速查找的索引吗?外键会自动索引。