0

我一直在寻找一些优化技巧,因为我正在做一个使用 MySQL 通过 PHP 存储数据的 RPG 修改。

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

我正在使用爆炸和内爆作为存储武器的方法,例如,在具有“文本”值的列中。我不知道这是否是一个好的做法,我不知道如果我让成千上万的玩家执行大量的 UPDATES 、 SELECT 等请求,我是否会遇到性能问题。

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

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

至少可以存储 100 个项目,我不知道在不同的表上为每个用户创建 100 条记录并始终调用所有记录是否比仅调用列并使用爆炸更好。

此外,我想提高我的技能和知识,以制作性能最好的 MySQL 数据库。

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

谢谢,并为我愚蠢的英语语法感到抱歉。

4

3 回答 3

2

规范化表数据几乎总是最佳实践。这条规则有一些例外(尤其是在容量非常大的数据库中),但您可能不需要担心这些例外,直到您首先了解如何正确规范化和索引您的表。

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

因此,在您的情况下,您有用户 - 那是一张桌子。每个用户可能拥有多种武器。所以,你现在有一个武器表。由于多个不同的用户可能拥有相同的武器并且每个用户可能拥有多个武器,因此他们之间存在多对多的关系,因此您应该有一个表“users_weapons”或类似的表,它只会将用户 ID 与武器 ID 关联起来.

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

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

于 2012-12-14T18:31:50.137 回答
0

是的,最好使用几张桌子而不是一张。更好的 db 性能,更容易理解,更容易维护和更简单的使用。

让我们建议一位用户拥有多种具有多种功能的武器(但在所有武器中并非独一无二)。在你的游戏中,你只需要知道一个特定功能的价值:

  • 以您的方式执行此操作,您需要在用户表中找到用户行,在列上获取,将其分解几次,然后您就有了您的价值,但如果您想更改它并保存,它会变得更加复杂。

  • 更好的方法是有一个用于用户详细信息(登录名、密码、电子邮件等)的表格,另一个保存用户武器的表格(武器名称,可能是图像)和一个表格,其中将保留所有功能,武器的特殊能力。您也可以将所有武器的所有可能功能保留在额外的表格中。这样,如果您已经从用户表中知道用户 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。这样你就不必爆炸和内爆它!

于 2012-12-14T18:15:11.437 回答
0

正如所有人所说,通常您应该从规范化的数据库结构开始。如果性能还可以,那就太好了,没什么可做的。

如果没有,您可以尝试许多不同的方法:

  1. 查找并优化运行缓慢的查询。
  2. 非规范化查询 - 有时连接会扼杀性能。
  3. 更改应用程序中使用的数据访问模式。
  4. 将数据存储在文件系统中或使用 NoSQL/多语言持久性解决方案。
于 2012-12-14T18:54:31.807 回答