在Database / MySQL中存储邮件列表

时间:2012-02-02 06:28:55

标签: mysql sql database

我有数百万条记录(行)的表。 在此表中,表中有一列名为mail_to。 对应于每个记录,有一个邮件列表,然后邮件列表的信息存储在此列mail_to中。 在我系统的当前实现中,我将邮件列表存储为逗号分隔的邮件ID列表。

例如 考虑一个表订阅数据

     | Column A | Column B |........ | mail_to                     |
     | Record 1 | abc      |         | xyz@gmail.com,abc@gmail.com |

如果我想检索与记录对应的邮件列表,则当前实现可以正常工作。但是如果我想搜索对应于abc@gmail.com的记录,查询就太慢了。

我能想到的一种方式是

订阅数据中将A列存储到N列 然后将邮件ID放在单独的表中,说用户电子邮件数据 以及存储连接信息的第三个表。

但是,我不确定它是否会给我任何改进,因为每次我会查询时会有2个连接。

任何人都可以建议一个更好的方式来存储这个邮件列表/帮我评估两者中哪个更好。任何帮助将不胜感激。

由于

2 个答案:

答案 0 :(得分:0)

您可以存储这两种变体,但它违反了3NF。但如果你在寻找速度 - 一些非规范化可能有所帮助。

您可以使用旧的连续邮件列表进行处理,并使用新的多表架构进行快速搜索。

答案 1 :(得分:0)

首先关闭

  • 数据库旨在加入。
  • 数据库不是为扫描CSV数据以提取部分字符串而设计的。

您当前的设计违反了规范化的第一条规则:没有重复的群体。

如你所知,你应该有这样的东西(UQ =唯一)

<强>订阅

  • SubscriptionDataID(PK)
  • ColumnB
  • ColumnC
  • ...

<强> USEREMAIL

  • EmailDetailID(PK)
  • SubscriptionDataID(FK)
  • EmailAddress(UQ)