Хранение списка рассылки в базе данных / MySQL - PullRequest
2 голосов
/ 02 февраля 2012

У меня есть таблица с миллионами записей (строк).И в этой таблице есть столбец в таблице с именем mail_to.Соответствующей каждой записи есть список рассылки, а затем информация о списке рассылки сохраняется в этом столбце mail_to.В текущей реализации моей системы я сохранил список рассылки как список идентификаторов почты, разделенных запятыми.

Например, рассмотрим таблицу, Данные подписки

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

Текущая реализация работает нормально, если я хочу получить список рассылки, соответствующий записи.Но если я хочу искать записи, соответствующие abc@gmail.com, запросы слишком медленные.

Я мог бы подумать, что

Сохранение столбца A в столбце N в ПодпискаДанные , а затем почтовые идентификаторы в отдельной таблице: Данные электронной почты пользователя и третья таблица, в которой хранится информация о соединении.

Но я не уверен, что это даст мнелюбое улучшение, поскольку каждый раз, когда я буду запрашивать, будет 2 соединения.

Может ли кто-нибудь предложить лучший способ хранения этого списка рассылки / помочь мне оценить, какой из этих двух вариантов лучше.Любая помощь будет оценена.

Спасибо

Ответы [ 2 ]

0 голосов
/ 02 февраля 2012

Прежде всего

  • Базы данных предназначены для JOIN.
  • Базы данных не предназначены для сканирования данных CSV для извлечения частичной строки.

Ваш текущий дизайн нарушает первое правило нормализации: нет повторяющихся групп.

Как вы заметили, у вас должно быть что-то вроде этого (UQ = уникальное)

Подписка

  • SubscriptionDataID (PK)
  • Столбец B
  • Столбец C
  • ...

UserEmail

  • EmailDetailID (PK)
  • SubscriptionDataID (FK)
  • EmailAddress (UQ)
0 голосов
/ 02 февраля 2012

Вы можете хранить оба варианта, хотя это нарушает 3NF.Но если вы ищете скорость - может помочь некоторая денормализация.

Вы можете использовать старый составной список писем для обработки и использовать новую схему для быстрого поиска.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...