一个大桌子还是多个小桌子?

时间:2018-12-17 13:23:21

标签: mysql sql database

我想知道哪种方法在创建数据库时(即用于消息传递应用程序)更好。可以说有一个包含所有消息的表。哪个更好:

  1. 为所有消息提供一张大桌子,或者
  2. 对于最近发送的邮件有一个表,对于例如1个月前发送的所有邮件,有一个表。

我的想法是,最好选择第二个选项,因为在较小的数据库中搜索将成为最常见查询的速度更快,而不是通过包含所有查询的庞大表来进行搜索曾经发送过的消息。我试图查找大型数据库的最佳实践,但没有找到任何可以回答此问题的方法。

2 个答案:

答案 0 :(得分:4)

所有消息的一个表。在大多数情况下(没有特殊的情况可能是个好主意),没有充分的理由将单个实体分成多个表。关系数据库被设计用于大型表,而不是大型表。

如果性能是一个问题,请了解有关索引和表分区的信息。

以下是您不想要多个表的一些原因:

  • 随着时间的推移维护表(添加列,碎片整理,添加索引)是一个真正的痛苦。
  • 构造查询以查看 all 数据是一个真正的难题。
  • 部分填充的数据页可能会占用大量磁盘和内存。
  • 与使用分区的替代方法相比,备份和还原是痛苦的。
  • 安全性和权限很痛苦。

一个数据库中具有多个表的原因很少。原因之一可能是满足安全要求。通常,应用程序是使用自己的带有表副本的数据库构建的。这是应用程序设计的一部分。

答案 1 :(得分:0)

对于所有消息而言,一个表是好的,因为存在多表格式的冗余。