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

Which will be the better database design in following situation? Why?

首先要明确剧情

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

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

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

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

但是一个列表可以有几千封邮件,所以如果客户端增加,检索数据会导致性能问题

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

  1. 为状态列建立索引
  2. 为不同的联系状态制作不同的table,例如

    一个 table 用于正常添加的联系人 另一个用于取消订阅的联系人。 其他州依此类推

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

我将绑定多对多关系中的列表和联系人上面table只是为了描述问题。 提前致谢。

更新

从上面检索信息的查询 table

  1. 用于检索普通联系人

    select * 来自 group_id = '[group_id]' 且状态 = 1

  2. 的联系人
  3. 对于未订阅的联系人

    select * 来自 group_id =[group_id]' 且状态 = 2 的联系人 等等。

对于你的评论,请在 group_idstatus

上建立索引

 create index my_index on contacts(group_id, status) 

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

在扫描该列表时不执行任何昂贵的操作(例如发送电子邮件)可能是个好主意