我有一个网站,其成员互相发送消息。会有几个成员,他们喜欢发送消息 - 我相信你可以看到它的发展方向。
目前我已经将消息存储在一个很好的关系表中,狡猾地标题为“消息”,具有不同的状态ID来表示,呃,状态(未读,保存等)。我知道这是事后的事,但我认为我真的需要将这个表分成其他几个(例如,每个状态类型不止一个),我不知道最好的方法是什么关于它。
我有几个想法,其中没有一个是火箭科学,但我很好奇这是否有'标准解决方案'。谷歌建议没有,但是我认为这些问题在stackoverflow之外并不常见。
任何人已经完成了吗?
答案 0 :(得分:3)
我肯定会将'messages'表分成多个。例如:
MessageStatus 信息 MessageText中
这样,如果您在某个收件箱中显示项目列表,则只需扫描“消息”表,该表是较小且固定长度的列,以获得最大搜索速度。当有人想打开并查看邮件正文时,您可以点击“MessageText”表。 “消息状态”只是一个查找表,用于将一个tinyint FK加入到“消息”表中。
您可以在1个表上获得更多性能,可能是一个中等文本列。
答案 1 :(得分:0)
你有没有想过可能有一个存档过程可以存档任何旧的,然后存在一段时间?
通过适当的索引和微调,您将不得不有相当多的消息要求将它们移动到多个表中,除非它是空间问题。
答案 2 :(得分:0)
拥有包含大量数据的消息表没有任何问题。如果你真的不需要它,没有理由拆分它。
如果您担心此表的性能,请首先根据您的需要明智地选择您的存储引擎:我的建议是使用InnoDB,因为它将是写密集型的。然后查看索引以加快读取速度。
如果表格太大而且速度太快,你可以做的是创建2个表格:
带有MyISAM存储的messages_archive表(仅用于快速检索和搜索“已存档”的消息)。
带有InnoDB存储的messages_inbox表:这是经常插入新消息的表。
可选:
编辑:
根据您的评论,我了解您所寻找的实际上是“Partitioning”。
不同的MySQL分区类型允许您按范围,列表,密钥或散列对数据进行物理隔离。