MySQL表的最大行数是多少?

时间:2011-01-29 09:12:09

标签: mysql scalability innodb max rows

注意:我在这里搜索过其他类似的Q,并且其他任何一个回答的问题都没有甚至是相似的。有了...... 我有一个关于MySql表的问题(更准确地说,是关于表中的特定字段 - 即tweetsupdates)。

所以问题是... InnoDB表上的最大行数是多少?也就是说,如果MyIsam,InnoDB和其他人可以持有的金额之间存在很大差异,那么一般来说,如果没有。 其次,如果表格变得非常大,那么存储数据的最佳实践是什么(相同的一个表格,或者分割/多个表格/ dbs)?

我读到Twitter每天都有1亿条推文。在同样的背景下,我的第二个问题将如何适用于像twitter这样的东西?

3 个答案:

答案 0 :(得分:19)

没有行限制,但InnoDB数据库上有size limit

  

最小表空间大小为10MB。   最大表空间大小为四   十亿个数据库页面(64TB)。这是   也是表格的最大尺寸。

您可以通过在多个文件中将行存储在同一个表的多个分区中来始终horizontally partition

答案 1 :(得分:14)

http://dev.mysql.com/doc/refman/5.5/en/innodb-restrictions.html将允许您根据密钥大小计算限制。

但我谦卑地建议您不要在具有参照完整性和InnoDB的其他功能的事务引擎中存储推文之类的信息,并且您肯定不会将它们全部存储在一个表中在单个数据库实例中。您将它们放入许多独立的非SQL数据库中,这些数据库允许您快速追加,然后将元信息(如主题标签,RT等)提取到更复杂的数据库中。关于Twitter数据库架构的演示很容易谷歌(例如http://www.slideshare.net/nkallen/q-con-3770885)。

如果您必须在一个表中存储大量数据,则分区是您的朋友,并且Postgres可能会更好地支持它。分区表实际上是几个逻辑上看起来像一个表的表。您将这些子表(分区)放在不同的磁盘上,独立地对它们进行维护等。此外,“星型模式”包含一个非常长的表,其中只包含必要的列和许多存储较大但可选列的表帮助

答案 2 :(得分:2)

表的64TB限制有以下例外:

  • 假定为innodb_page_size = 16K(默认值)。可以设置为4K和64K之间的2的幂,按比例更改表空间限制。
  • PARTITIONed表基本上是一堆子表'组织在一起,充当一张大桌子。分区数量的5.6.7之前的限制是1024.之后,它已经是8192.所以将64TB乘以它。

好的,这只会给你一个字节限制。此外,它还包括开销和索引。然后,您需要除以平均记录的大小来获得最大行数。

(计算平均记录大小并不容易。)

简单回答:

你可能很容易得到1万亿"小" InnoDB表中的记录。通过一些努力,你可能会达到1000万亿。但我怀疑你之前的磁盘驱动器预算会耗尽。此外,需要花费数年才能完成所有INSERTs来填补它!

所以,现实的答案:MySQL可以处理无限制的'行数。

现实生活?我听说有几张表超过10亿行,甚至多达150亿行。

请参阅我的Limits,但它没有更多关于行的问题。