2009-09-08 70 views
0
  1. 我得到了一个users表和一些论坛,用户可以在这里写。论坛上的每个动作都使用users表。用户可以有一个配置文件,它可以很大(50KB)。如果我在每一行中获得如此大的数据,那么将单独的表与用户的配置文件以及其他非常频繁访问的数据分开是不是更快?行设计如何影响MySQL性能?

  2. 在线RPG游戏中,每个角色都有很长的能力列表,例如:手枪经验,机枪经验,投掷手榴弹经验以及15个以上。将它们存储在字符串中是否更好?用分号分隔的数字 - 这会占用比整数更多的空间,还是应该为每个单独的字段创建?或者也许二进制? (我使用C++)

回答

0

(1)本身不,没有。正如斯蒂芬所说,你应该只选择你想要的东西,所以你不想在桌上有东西是没有问题的。 50K TEXT blob只是该行中的一个指针。

但是,如果您正在使用MyISAM表,则可能会出现问题。在MyISAM中,只有表级锁定,所以当你有一个用户更新他们的行(例如最后访问时间)时,它会阻止所有其他用户访问表。在这种情况下,您可能会遇到一些改进,将大量更新的列从相对静态的但重要的列中分离出来。

但是你不想使用MyISAM:它有点废话。使用InnoDB,获得行级锁定(以及事务和外键约束),不用担心。今天使用MyISAM表的唯一原因是全文搜索,InnoDB不支持。 (2)您通常会将每个独立的值分隔到自己的字段中。如果你遇到了一个真正的性能问题,并且你不需要自己对数据库进行数据库级别的操作,你可以考虑对它进行非规范化处理,但是你会失去数据库的能力。

1
  1. 如果你不需要从 特定列中的数据,不明白这一点。 不要做SELECT *SELECT a, b,...

  2. 如果你需要 某些列做SQL查询例如ORDER BY pistols_experience,您应该在 中将其留在不同的列中。如果 你只是一次展示这一切,你可以 通过YAML序列化不同 键 - 值对的文本字段 ,JSON等