MySQL中的表拆分

时间:2015-04-28 08:10:00

标签: mysql table-splitting

我有关于数据库表拆分的异常情况;我有一张名为' message'保留通过电子邮件发送的消息的信息:

Message                              Status
--------------------------------     -------------
id | subject | body | status_id      status_id | caption
--------------------------------     ----------------------
1    random    bla    3              1           draft
2    second    hello  3              2           scheduled
15   subj      ok     1              3           archived

创建消息后,它的状态会自动设置为draft,它可以是scheduled,最后,当发送给至少一个联系人时,它的状态是archived

我的老板建议将邮件分成three tables名为

  

草案,

     

预定和

     

归档。

实际上,几乎每次在数据库中搜索message以发送(status is 'draft')时,该表都会包含大量不需要的数据(状态为“已存档'”的消息)。但是,如果我拆分表,每次更改消息的状态时,我都必须将其插入相应的表,并从当前delete表中status

由于我之前没有听说过这种做法,我要求提出意见。它对表split有效吗?提前致谢

2 个答案:

答案 0 :(得分:1)

您不需要为此分割表格。对于优化查询,您应该添加更多索引,特别是您可以在status_id列上使用索引。另外,我没有看到将状态置于单独的表中的重点。如果您需要标题,可以将其用作status_id,否则您可以使用常规整数。

答案 1 :(得分:1)

在我看来,这会在处理邮件时产生不必要的开销。使用status_id过滤结果应该提供您在" draft"中查找消息所需的内容。状态。只要您的桌子上有适当的索引,性能就不会成为问题。在某些时候,根据数量,您可能希望将这些消息真正归档到另一个表,但这纯粹是一个设计考虑因素。这取决于您是否需要在指定的时间内保留这些消息的记录。