我在数据库表拆分方面遇到异常情况;我有一个名为"消息"的表,其中包含要通过电子邮件发送的消息的信息:
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')
时,该表都会包含大量不需要的数据(状态为"已存档"的消息)。但是,如果我拆分表,每次更改消息状态时,我都必须将其插入到相应的表中,并从当前status
表中delete
。
由于我以前从未听说过这种做法,因此我征求意见。split
表是否有效?提前致谢
您不需要为此拆分表。对于优化的查询,您应该添加更多索引,特别是您可以在status_id列上使用索引。此外,我不认为将状态放在单独的表中有什么意义。如果您需要标题,您可以将其用作status_id,否则您可以只使用常规整数。
在我看来,这在处理消息时会产生不必要的开销。 使用status_id过滤结果应该提供查找处于"草稿"状态的邮件所需的内容。 只要表上有适当的索引,性能就应该不是问题。 在某些时候,根据数量,您可能希望真正将这些消息存档到另一个表,但这纯粹是设计考虑。 这取决于您是否需要在指定的时间内保留这些消息的记录。