在以下情况下哪个数据库设计会更好?为什么?

时间:2015-03-22 13:12:04

标签: mysql database database-design relational-database database-schema

首先,我想澄清这个情景。

群发邮件系统有列表(电子邮件组),每个列表都有多个联系人(电子邮件)。联系人有一些状态,如正常,取消订阅,退回等。

我正在考虑设计这样的东西。

Table Contacts
-----------------------------------------
id    email   group_id contacts   status
-----------------------------------------

状态将存储上述电子邮件ID状态。

但是一个列表可能有数千封电子邮件,因此如果客户端增加,则会导致数据检索导致性能问题

所以我得到了两个解决方案

  1. 为状态列
  2. 制作索引
  3. 为不同的联系人状态制作不同的表格,如

    正常添加联系人的一个表 另一个未订阅的联系人。 等其他州

  4. 所以我的问题是对于上述情况哪个是更好的解决方案。 请指导我。

    我打算将列表和联系人绑定在上面的表中的多对多关系中,仅用于描述问题。 提前致谢。

    更新

    查询从上表中检索信息

    1. 用于检索普通联系人

      从联系人中选择*,其中group_id ='[group_id]'和状态= 1

    2. 未订阅的联系人

      从联系人中选择*,其中group_id = [group_id]'和状态= 2 等等。

1 个答案:

答案 0 :(得分:0)

对于您的评论,请在group_idstatus

上添加索引

 create index my_index on contacts(group_id, status) 

这将解决任何性能问题,因为数据库可以在不锁定表的情况下找到列表。

在扫描该列表时可能不会执行任何昂贵的操作(例如通过电子邮件发送)