MySql - 大型单表或多个小表

时间:2010-10-15 16:21:17

标签: mysql database-design

我正在构建一个PHP / MySql数据库应用程序,它可能会在某些表上使用频繁。

有三个表可能会执行大量UPDATE - 这里有一些关于这些表的信息

  1. 每个用户每个表最多有200行
  2. 每行可以大到250k
  3. 潜在用户群可能是5,000个用户
  4. 我的主要问题是每个MySql数据库的max#表是什么(在Linux服务器上)。我也对采用为每个用户分配表而不是所有用户共享的单个表的方法的利弊感兴趣。

4 个答案:

答案 0 :(得分:6)

表的数量仅受inode数量或磁盘上的物理空间的限制。

虽然很难给出好的意见但却不知道你在做什么。通常我会说只要你有适当的索引,一个1,000,000行表对MySQL来说并不是什么大不了的事。恕我直言,这是一个比为每个用户提供一个表更好的解决方案(系统可以做到但我认为它最终成为维护噩梦)。

为什么每张桌子需要250k?你在每行储存的东西是多少?探索将数据拆分为其他表格。

通常,良好的数据库设计会将数据类别放入表中,而不是将表用作行。

答案 1 :(得分:1)

从设计和编程的角度来看,一张桌子绝对是可取的。我认为多表分片方法是一种黑客攻击,在开发和测试“正确”设计之后,你应该只考虑性能原因。

如果1)你的表被广泛索引或2)它们涉及大量行重写/移动(我不知道MySQL中的细节),UPDATE会伤害你。

答案 2 :(得分:1)

每个数据库的最大表数受限于您的文件系统。该数字对应于目录中允许的文件数。

创建那么多表似乎是一个维护噩梦。如果您需要更改表的任何内容,则需要为每个用户执行此操作。这可能需要数小时或数天。将所有用户数据保存在同一个表中,并在用户ID上有一个良好的索引,这将使您更进一步。

答案 3 :(得分:0)

MySQL不会强加最大表限制。真正的限制是你的操作系统。 MySQL将每个表存储为一个单独的文件,因此拥有5,000个表而不是2个或3个表并不是那么好。

我绝对不建议为每个用户创建一个表,原因有很多 - 您希望数据 IN 表。

在您的用户ID表上添加一个索引,您就可以了。