Mysql 在以下情况下,哪种数据库设计更好?为什么?
首先,我想澄清一下情况 有大量的邮件系统有列表(电子邮件组),每个列表有多个联系人(电子邮件)。联系人有一些状态,如正常、未订阅、反弹等 我正在考虑设计这样的东西Mysql 在以下情况下,哪种数据库设计更好?为什么?,mysql,database,database-design,relational-database,database-schema,Mysql,Database,Database Design,Relational Database,Database Schema,首先,我想澄清一下情况 有大量的邮件系统有列表(电子邮件组),每个列表有多个联系人(电子邮件)。联系人有一些状态,如正常、未订阅、反弹等 我正在考虑设计这样的东西 Table Contacts ----------------------------------------- id email group_id contacts status ----------------------------------------- status将存储上述电子邮件ID状态 但是一个列表可
Table Contacts
-----------------------------------------
id email group_id contacts status
-----------------------------------------
status将存储上述电子邮件ID状态
但是一个列表可能包含数千封电子邮件,因此如果客户端数量增加,检索数据将导致性能问题
所以我得到了两个解决方案
请在
group\u id
和status
i、 e
这将解决任何性能问题,因为数据库可以在不锁定表的情况下找到列表
在扫描该列表时,最好不要执行任何昂贵的操作(例如,发送电子邮件)为什么问题会被否决?是否有任何错误。除非我知道您将要使用的查询,否则我无法推测您需要的索引。@EdHeal获取列表联系人的查询将是从联系人中选择*,其中组id=[group\u id]和状态=1(对于普通联系人)。查询列表中的未订阅联系人将从联系人中选择*,其中group_id=[group_id]和status=2(对于未订阅的联系人)将其作为问题的编辑-这对回答者来说有点关键第二种方法会有什么问题?为什么要麻烦地将联系人从一个表移动到另一个表?这不是必需的。我打算在数据库中一次添加数千封电子邮件,还允许其他基本的crud操作。因为我知道索引会降低插入更新操作的性能。是的。但它提高了读取性能。当然,大多数操作都是读取的。如果您正在上传大量数据,请在一段安静的时间(例如,隔夜)进行上传,或者将其分解
create index my_index on contacts(group_id, status)