Php MySQL数据库中的表太大

Php MySQL数据库中的表太大,php,mysql,load,scalability,Php,Mysql,Load,Scalability,我正在制作一个在线游戏和数据库中的一张表。也许是最重要的一个。它开始变得很大了。我正在创建一个可以与多个用户一起使用的函数,目前为止,我有一个如下所示的表: CREATE TABLE `oc` ( `id` int(11) NOT NULL auto_increment, `leader` varchar(40) NOT NULL default '', `car` int(11) NOT NULL default '0', `car_type` char(2) NOT NUL

我正在制作一个在线游戏和数据库中的一张表。也许是最重要的一个。它开始变得很大了。我正在创建一个可以与多个用户一起使用的函数,目前为止,我有一个如下所示的表:

CREATE TABLE `oc` (
  `id` int(11) NOT NULL auto_increment,
  `leader` varchar(40) NOT NULL default '',

  `car` int(11) NOT NULL default '0',
  `car_type` char(2) NOT NULL default '',  

  `seats` varchar(3) NOT NULL default '0',
  `share` enum('1','2') NOT NULL default '1',
  `location` varchar(100) NOT NULL default '',  

  `user1` varchar(40) NOT NULL default '', 
  `user2` varchar(40) NOT NULL default '',  
  `user3` varchar(40) NOT NULL default '', 
  `user4` varchar(40) NOT NULL default '', 
  `user5` varchar(40) NOT NULL default '',  
  `user6` varchar(40) NOT NULL default '', 
  `user7` varchar(40) NOT NULL default '', 
  `user8` varchar(40) NOT NULL default '', 
  `user9` varchar(40) NOT NULL default '', 

  `leader_gun` char(2) NOT NULL default '', 
  `user1_gun` char(2) NOT NULL default '', 
  `user2_gun` char(2) NOT NULL default '',  
  `user3_gun` char(2) NOT NULL default '', 
  `user4_gun` char(2) NOT NULL default '', 
  `user5_gun` char(2) NOT NULL default '',  
  `user6_gun` char(2) NOT NULL default '',  
  `user7_gun` char(2) NOT NULL default '', 
  `user8_gun` char(2) NOT NULL default '', 
  `user9_gun` char(2) NOT NULL default '',   

  `user1_inv` varchar(40) NOT NULL default '', 
  `user2_inv` varchar(40) NOT NULL default '',  
  `user3_inv` varchar(40) NOT NULL default '', 
  `user4_inv` varchar(40) NOT NULL default '', 
  `user5_inv` varchar(40) NOT NULL default '',  
  `user6_inv` varchar(40) NOT NULL default '',  
  `user7_inv` varchar(40) NOT NULL default '', 
  `user8_inv` varchar(40) NOT NULL default '', 
  `user9_inv` varchar(40) NOT NULL default '',    

  `user1_ready` enum('0','1') NOT NULL default '1', 
  `user2_ready` enum('0','1') NOT NULL default '1',  
  `user3_ready` enum('0','1') NOT NULL default '1', 
  `user4_ready` enum('0','1') NOT NULL default '1',  
  `user5_ready` enum('0','1') NOT NULL default '1', 
  `user6_ready` enum('0','1') NOT NULL default '1',  
  `user7_ready` enum('0','1') NOT NULL default '1', 
  `user8_ready` enum('0','1') NOT NULL default '1',   
  `user9_ready` enum('0','1') NOT NULL default '1',     

  PRIMARY KEY  (`id`)
) TYPE=MyISAM ;
现在我想知道我的局限性是什么。如果有多达30个用户可以一起玩,那就太酷了,但是我的桌子将需要3倍多的字段。30支
user1_枪
30x
user1_枪
和30支
user1_枪准备就绪

这个数据库将被大量使用,因为所有用户在访问页面时都需要数据库中的所有信息来列出所有其他用户名等。所有用户还可以更改表中至少3个值

我应该将我的表限制为9个用户,还是可以为100个用户创建一个表??我不知道。我可以编写一些代码,但以前从未管理过大型mysql数据库和服务器

编辑:好的。我只是想说清楚。我有一个用户表,其中包含关于我的用户的各种信息,一个连接到用户表的汽车表,一个连接到我的用户表的武器表这不是我唯一一张最多9名玩家可以玩游戏的桌子oc表需要为每个用户选择的用户名和枪支以及发出准备就绪信号的用户提供字段。。我认为我不需要数据库规范化…

你真的需要修改你的数据库!您使用的是关系数据库,因此首先应该定义数据中的关系

游戏和玩家之间存在一对多关系(一个游戏可以有多个玩家,但一个玩家一次只能玩一个游戏)。因此,您应该创建一个游戏表,其中包含特定于每个游戏的信息(id、领导者、汽车、汽车类型、座位、共享、位置)。然后创建一个单独的用户表,其中包含特定于用户的所有数据(id、名称、枪、库存、就绪)。然后,您可以使用将用户表链接到游戏表。因此,除了已经提到的用户信息之外,用户表还应该包括诸如game_id之类的字段,该字段将来自游戏表的游戏id存储为外键

您可能可以通过包括一个gun表、一个car表等来进行进一步的规范化

规范化减少了冗余数据,提高了数据库的效率,并减少了数据异常。这里是对这个概念的一个很好的介绍:这还涉及到连接表,这是查询规范化数据库时需要做的

编辑: 作为对您的澄清的回应,您可能希望研究数据库以外的解决方案。在关系数据库中不应该有这样的表。根据您提供的信息,这一切似乎都是为了跟踪游戏中的信息,而且可能有比关系数据库更好的解决方案


如果您真的想将这些信息保存在关系数据库中,那么仍然应该对其进行规范化。因此,如果您已经有一个单独的用户表,您需要将其展开以说明游戏中的用户信息,或者可能有一个活动的用户表,其中包含特定于当前游戏的信息。

为什么不使用两列db:基本上是一个键值分数。因为这是一款在线游戏,所以使用memcache快速访问数据会很容易

这两列将是key和value
值将是数据的json表示形式

你来得正是时候:你在寻找一些沉重的负担(现在不能写文章,但我相信有人会写。)而不是将所有用户的数据存储在同一个表中。创建一个新表并链接到该表,以便您可以在游戏中存储infinte用户数。在维基百科或stackoverflow上阅读更多关于数据库规范化的信息:这个游戏的实时性如何?MySQL可能不是您最好的选择。我不太明白如何将当前数据库中的值分离为两列数据库