多用户表VS 1用户表?

时间:2009-12-11 04:01:17

标签: php mysql

我处于两难境地。我不确定分离users表是否是一个好主意。我注意到我的游戏高分表的表现,随着数字的增长,负载变得越来越慢。

我当前的用户表存储了所有用户,目前大约有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(用户ID)

索引:用户名

用户数据=>专栏:很多

索引:id

3 个答案:

答案 0 :(得分:1)

听起来像拆分桌子对你没什么好处。看起来表之间会出现1:1的相关性,只要你想要那个表中的某些内容,就会添加第二个查询。

尝试使用表格中的Partitioning来帮助提升该方面的效果。

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

答案 1 :(得分:1)

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

更重要的是,根据我的经验,基于直觉感觉优化是一个坏主意。不知何故猜测什么阻碍了你的程序通常是错误的。你最终会做很多重写而没有任何速度提升。

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

只有在您知道要修复的内容后才能尝试修复它。

答案 2 :(得分:0)

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

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