如何在MySQL表上拆分数据

如何在MySQL表上拆分数据,mysql,scalability,large-data-volumes,Mysql,Scalability,Large Data Volumes,我有一个网站,会员之间互相发信息。有越来越多的成员,他们喜欢发送消息-我相信你可以看到这是走向 目前,我已经说过,消息存储在一个关系良好的表中,巧妙地命名为“messages”,具有不同的状态ID来表示,呃,状态(未读、已保存等)。我知道这是事实,但我想我真的需要把这个表分成几个其他的表(例如,每个状态类型有多个表),我不确定最好的方法是什么 我有几个想法,没有一个是火箭科学,但我很好奇这是否有一个“标准解决方案”。谷歌建议不会,但我想,在stackoverflow这样的地方之外,这类问题并不常

我有一个网站,会员之间互相发信息。有越来越多的成员,他们喜欢发送消息-我相信你可以看到这是走向

目前,我已经说过,消息存储在一个关系良好的表中,巧妙地命名为“messages”,具有不同的状态ID来表示,呃,状态(未读、已保存等)。我知道这是事实,但我想我真的需要把这个表分成几个其他的表(例如,每个状态类型有多个表),我不确定最好的方法是什么

我有几个想法,没有一个是火箭科学,但我很好奇这是否有一个“标准解决方案”。谷歌建议不会,但我想,在stackoverflow这样的地方之外,这类问题并不常见


有人已经这样做了吗?

您是否想过可能有一个归档过程,可以归档比某个时间段更早的任何内容


通过适当的索引和微调,您必须有相当多的消息才能在多个表之间移动它们,除非是空间问题。

拥有一个包含大量数据的消息表没有什么错。如果你真的不需要它,就没有理由分开它

如果您担心此表的性能,请首先根据您的需要明智地选择存储引擎:我的建议是使用InnoDB,因为它将是写密集型的。然后查看索引以加快读取速度

如果表格变得太大、太慢,您可以创建两个表格:

  • 带有MyISAM存储的messages_归档表(仅用于快速检索和搜索“归档”邮件)

  • 带有InnoDB存储的messages_inbox表:这是一个经常插入新邮件的表

可选:

  • a邮件\u草稿,保留自动保存的邮件。原因:无需使用草稿邮件减慢收件箱表的速度
顺便说一句,这不是你所说的“标准解决方案”,只是一个想法。:)

编辑:

从您的评论中,我了解到您所寻找的实际上是“”


不同的MySQL分区类型允许您按范围、列表、键或散列物理隔离数据。

我会明确地将“messages”表拆分为多个分区。例如:

消息状态 消息 消息文本

这样,如果您在某人的收件箱中显示项目列表,您只需扫描“Message”表,该表较小且为固定长度列,以获得最大搜索速度。当有人想要打开并查看邮件正文时,您可以点击“MessageText”表。“Message Status”只是一个查找表,它与一个tinyint FK'd连接到“Message”表


与一个可能包含mediumtext列的表相比,您将获得更高的性能。

好的建议(尤其是存储引擎,没有想到),谢谢。事实上,我在考虑构造“多个”邮件的最佳方法。干杯,我没有想到为了收件箱的目的而分隔一个表。好主意:)