【问题标题】:MySql - Large Single Table or Multiple Small TablesMySql - 大型单表或多个小表
【发布时间】:2010-10-16 00:49:54
【问题描述】:

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

三个表可能会执行大量更新 - 以下是有关这些表的一些信息

  1. 每个用户的每个表最多有 200 行
  2. 每行可以大到 250k
  3. 潜在用户群可能是 5,000 个用户

我有一个广泛的问题是每个 MySql 数据库的最大表数是多少(在 Linux 服务器上)。我也对采用为每个用户分配一个表而不是所有用户共享的单个表的方法的利弊感兴趣。

【问题讨论】:

  • 根据您对最大行大小的评论,我认为您打算将大量数据存储在单个字段中。与其他字段相比,您的更新将占多大比例的数据块?

标签: mysql database-design


【解决方案1】:

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

如果不知道更多关于你在做什么,虽然很难给出一个很好的意见。一般来说,只要您有适当的索引,我会说 1,000,000 行的表对 MySQL 来说没什么大不了的。恕我直言,这是一个比为每个用户都有一张桌子更好的解决方案(系统可以做到,但我认为它最终会成为维护的噩梦)。

为什么每张桌子需要 250k?你在存储什么,每一行都这么大?探索将这些数据拆分到其他表中。

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

【讨论】:

  • 5,000 x 200 = 1,000,000。但是,我仍然同意 1M 行对于数据库来说并不是特别大。
  • 说得好 - 我想我会根据你的 cmets 坚持使用 1 张大桌子(无论如何现在)。谢谢 -
【解决方案2】:

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

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

【讨论】:

    【解决方案3】:

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

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

    【讨论】:

      【解决方案4】:

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

      我绝对不建议为每个用户创建一个表,原因有很多 - 你想要你的数据 IN 表。

      在您的用户 ID 表上放置一个索引就可以了。

      【讨论】:

      • MyISAM 将每个表存储为单独的文件,但 InnoDB 不会。
      猜你喜欢
      • 2013-12-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-10-18
      • 2010-11-13
      • 1970-01-01
      • 2016-05-30
      • 1970-01-01
      相关资源
      最近更新 更多