2008-11-27 53 views
2

我有一个网站,其中有成员互相发送消息。有成为几个成员,他们喜欢发送消息 - 我相信你可以看到这是怎么回事。如何在MySQL表格上拆分数据

存储在一个很好的关系表目前我已经说过狡猾的消息标题为“口号”,不同状态的IDS表示,呃,状态(未读,保存等)。我知道这是在事实之后,但我认为我真的需要将此表分成几个其他人(例如,每个状态类型多于一个),并且我不确定最佳方式是什么关于它。

我有几个想法,其中没有一个是火箭科学,但我很好奇,如果这有一个'标准解决方案'。谷歌建议不要,但是这种类型的问题并不是像我所想的那样,在像stackoverflow这样的地方以外。

任何了 - 有 - 做 - 这了吗?

回答

3

我会毫不犹豫地将'messages'表分成多个。例如:

MessageStatus 消息 MessageText中

这样,如果你在别人的收件箱中显示的项目列表,你只需要扫描“消息”表,该表是最大较小,固定长度列寻道速度。当有人想要打开并查看消息正文时,您可以点击'MessageText'表。 '消息状态'只是一个查找表,用于将一个tinyint FK加入到'消息'表中。

您可以在1个表格中获得更多的性能,并且可能具有中等文本列。

0

你有没有想过可能有一个存档过程,可以存档任何一段时间之后的某段时间?

通过适当的索引和微调你就必须有相当多的信息需要跨多个表移动它们,除非它与空间的问题。

0

使用大量数据的消息表没有任何问题。没有理由分裂它,如果你不需要它。

如果你担心这个表的性能,首先选择你的存储引擎明智地取决于你的需求:我的建议是使用InnoDB的,因为这将是写密集型。然后查看索引以加快您的阅读速度。

如果表中真正得到过大,速度慢,你可以做什么,是创建2个表:

  • 一个messages_archive表,用MyISAM存储(仅用于“存档”快速检索和搜索消息)。

  • 一个messages_inbox表,与InnoDB存储:这是在新邮件被频繁插入该表。

可选:

  • 一个messages_drafts,保持自动保存的消息。原因:无需使用草稿消息来减慢收件箱表的速度。

顺便说一句,这不是一个“标准解决方案”如你所说,只是一个想法。 :)

编辑:

从你的评论,我理解你正在寻找的其实是 “Partitioning”。

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

+0

良好的建议(特别是存储引擎,虽然没有),谢谢。我实际上正在考虑构建多个“messages_archive表”的最佳方法 – da5id 2008-11-27 04:57:43

+0

我刚刚编辑了我的文章以给出一个新答案。 – Franck 2008-11-27 05:13:26