MySQL数据库优化,适用于20.000或更多用户

时间:2012-12-14 18:07:32

标签: php mysql database optimization

我一直在寻找一些优化提示,因为我正在进行RPG修改,它使用MySQL来存储PHP数据。

我使用一个唯一的表来按照其唯一ID将所有用户信息存储在列中,并且我必须为每个用户存储(很多?)数据。武器和其他信息。

我使用explode和implode作为存储武器的方法,例如,在一个带有'text'值的列中。我不知道这是不是一个好习惯,如果我让成千上万的玩家做了大量的UPDATES,SELECT等请求,我不知道是否会遇到性能问题。

我读到Junction表可能更好地存储武器和所有这些信息,但我不知道这是否会获得您通过爆炸方法请求它的更好信息。

我的意思是,我应该将所有武器存放在不同的表中,每个武器都有他的信息(每个武器都有一些信息,比如不同的列,我在主爆炸中使用多个爆炸)和用户所有者识别武器的武器,而不仅仅是将它们放在一列中。

至少可以存储100个项目,我不知道在不同的桌面上为每个用户制作100条记录是否合适,并且比调用列更好地调用所有这些记录并使用explode

此外,我想提高自己的技能和知识,以便创造出性能最佳的MySQL数据库。

我希望有人可以告诉我一些事情。

谢谢,对不起我愚蠢的英语语法。

3 个答案:

答案 0 :(得分:2)

规范化表数据几乎总是最佳做法。这个规则有一些例外(特别是在非常高容量的数据库中),但是在你初步了解如何正确地规范化和索引表之前,你可能不需要担心这些异常。

通常,尝试以模仿真实世界对象及其相互关系的方式排列表格。

因此,在您的情况下,您有用户 - 这是一个表。每个用户可能拥有多种武器。所以,你现在有一个武器表。由于多个不同的用户可能拥有相同的武器,并且每个用户可能拥有多个武器,因此它们之间存在多对多的关系,因此您应该有一个表“users_weapons”或类似的表,除了将用户ID与武器ID相关联之外什么都不做

现在说用户都可以拥有盔甲。所以现在添加一个装甲表和一个users_armor表(因为这可能是多对多的)。

只需仔细思考游戏的不同方面,并尝试理解它们之间的关系。确保在编写任何代码以实际实现功能之前,可以在数据库表中建模这些关系。

答案 1 :(得分:0)

是的,最好使用多个表而不是一个。数据库性能更好,更易于理解,更易于维护,也更易于使用。

让我们建议一个用户拥有多个具有多种功能的武器(但并非所有武器中都是唯一的)。在游戏中的某个位置,您只需知道一个特定功能的价值:

  • 按照你的方式做你需要在用户表中找到用户行,在列上获取,多次爆炸,并且你有你的价值,但如果你想改变它会更复杂然后保存。

  • 更好的方法是有一个表用于用户详细信息(登录,密码,电子邮件等),另一个表保存用户武器(武器的名称,图像可能)和表格中的所有功能,特殊功能武器保存。您可以将所有武器的所有可能功能保存在额外的表格中。这样你就可以知道用户表中的用户id了,你只需要在sql查询中加入2个表,你就可以获得用户特定武器特征的价值。

表的伪模式示例:

users
    user_id
    user_name
    password
    email

weapons
    weapon_id
    user_id
    weapon_name
    image

weapons_features
    feature_id
    weapon_id
    feature_name
    feature_value

如果您真的想在数据库的文本字段中使用某些有序数据,请将其编码为JSONserialize。这样你就不必爆炸并破坏它!

答案 2 :(得分:0)

正如所有人所说,通常你应该从规范化的数据库结构开始。 如果表现还可以,那就太好了,无所事事。

如果没有,你可以尝试很多不同的东西:

  1. 查找并优化运行缓慢的查询。
  2. 非规范化查询 - 有时加入杀死性能。
  3. 更改应用程序中使用的数据访问模式。
  4. 将数据存储在文件系统中或使用NoSQL /多语言持久性解决方案。