【问题标题】:Multiple users table VS 1 users table?多个用户表 VS 1 个用户表?
【发布时间】:2010-12-25 12:51:23
【问题描述】:

我处于两难境地。我不确定分离用户表是否是个好主意。我注意到我的游戏高分表表现,随着数字的增长,加载速度越来越慢。

我的当前用户表存储所有用户,目前大约有 10k 用户。我正在考虑将用户表(为将来)拆分成这样:

登录表 => 存储用户登录详细信息

==========================================
= id    | username  | password  | tableid  =
==========================================
=  1    |  user1    |  user1xx  |    1     =
=  2    |  user2    |  user2xx  |    1     =
...
= 20k1  |  user20k1 |  user20k1 |    2     =
etc

用户数据

==========================================
= id    | money  | items  | preferences  =
==========================================
=  1    |  xx    |  xx    |    xx        =
=  2    |  xx    |  xx    |    xx        =
...
= 20k1  |  xx    |  xx    |    xx        =
etc

所以,当我尝试获取用户数据时,我只需 LEFT JOIN 查询即可获取数据。

我的问题是,将用户数据存储在多个表中和将用户数据存储在单个表中之间有什么区别(速度、性能等)吗? (假设索引和主键相同)

我当前的表索引:

游戏高分表 => 列:id、gameid、名称、分数、日期

主键:id

索引:gameid

登录表 => 列:id、用户名、密码

主键:id (userid)

索引:用户名

用户数据 => 列:很多

索引:id

【问题讨论】:

    标签: php mysql


    【解决方案1】:

    听起来您在这里遇到的真正问题是:为什么 ma 应用程序很慢。首先,在几个表之间拆分数据不会提高性能。如果做得好(出于性能以外的原因),它不会损害性能,但我怀疑它会有所帮助。

    此外,根据我的经验,根据直觉进行优化是个坏主意。以某种方式猜测是什么阻碍了你的程序通常是错误的。您最终会进行大量重写,而速度却没有任何提高。

    加快速度的第一步是找到真正的瓶颈。您需要添加检测工具并收集一些统计数据来确定 - 是数据库还是应用服务器。它是一个特定的存储过程还是可能是您网络的带宽。或者可能是您页面上的一些 javascript。

    只有在你知道要修复什么之后,你才能尝试修复它。

    【讨论】:

      【解决方案2】:

      听起来拆分桌子对你没有任何好处。表之间似乎会发生 1:1 的关联,只要您想从该表中获取某些内容,就会简单地添加第二个查询。

      尝试在桌子上使用Partitioning 来帮助提高这方面的性能。

      规范化仅在您有冗余数据时才有用(因此,您的用户表中有 5 次相同的用户)。如果您想通过特定用户在多个游戏中的高分来降低数据使用量,这很有帮助,但最终它可能不会给您带来性能提升。

      【讨论】:

        【解决方案3】:

        如果您要查询一些信息并且您有很多 (edit:) 列,那么将它们分开实际上是一个非常好的主意,并且您不需要 users 表中的 tableid 字段,您只需要是信息表中的外键,指向用户表中的关联用户。

        您可以拥有多个这样的表并根据需要加入它们,性能很可能会提高。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2016-07-24
          • 1970-01-01
          • 2011-02-27
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2020-03-05
          相关资源
          最近更新 更多