自从我在做一个RPG修改,通过PHP使用MySQL来存储数据以来,我一直在寻找一些优化技巧。
我使用一个唯一的表通过其唯一 ID 将所有用户信息存储在列中,并且我必须为每个用户存储(很多?)数据。武器和其他信息。
我使用爆炸和内爆作为存储武器的方法,例如,在具有“文本”值的一列中。我不知道这是否是一个好的做法,并且我不知道如果我让成千上万的玩家执行大量的 UPDATES 、 SELECT 等请求,我是否会遇到性能问题。
我读到,连接表可能更好地存储武器和所有这些信息,但我不知道这是否会获得您通过爆炸方法请求的更好信息。
我的意思是,我应该将所有武器存储在不同的表中,每个武器都有他的信息(每个武器都有一些信息,比如不同的列,我在主爆炸中使用多个爆炸)以及该武器的用户所有者武器来识别武器而不仅仅是将它们放在一列中。
至少可以存储 100 个项目,我不知道在不同的表上为每个用户创建 100 条记录并始终调用所有记录是否比只调用列并使用爆炸更好.
我还想提高我的技能和知识,尽我所能打造最佳性能的 MySQL 数据库。
希望有人能告诉我一些事情。
谢谢,并为我愚蠢的英语语法感到抱歉。
最佳答案
规范化表数据几乎始终是最佳实践。此规则有一些异常(exception)(特别是在容量非常大的数据库中),但在您首先了解如何正确规范化表并为其建立索引之前,您可能不需要担心这些异常(exception)。
通常,尝试以模仿现实世界对象及其相互关系的方式排列表格。
因此,在您的情况下,您有用户 - 这是一张表。每个用户可能拥有多种武器。所以,你现在有了一个武器表。由于多个不同的用户可能拥有相同的武器,并且每个用户可能拥有多种武器,因此它们之间存在多对多关系,因此您应该有一个表“users_weapons”或类似的表,它除了将用户 ID 与武器 ID 相关联之外什么也不做。 .
现在假设用户都可以拥有盔甲。所以现在您添加一个装甲表和一个 users_armor 表(因为这也可能是多对多)。
只需思考游戏的不同方面并尝试理解它们之间的关系。确保您可以在数据库表中对这些关系进行建模,然后再编写任何代码来实际实现该功能。
关于php - 针对 20,000 个或更多用户的 MySQL 数据库优化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13884035/