Разделение таблиц в MySQL

У меня необычная ситуация с разбиением таблицы БД; У меня есть таблица с именем 'message', содержащая информацию для сообщений, отправляемых по электронной почте:

Message                              Status
--------------------------------     -------------
id | subject | body | status_id      status_id | caption
--------------------------------     ----------------------
1    random    bla    3              1           draft
2    second    hello  3              2           scheduled
15   subj      ok     1              3           archived

Когда сообщение создано, его статус автоматически устанавливается на draft, может быть scheduledи, наконец, когда отправлено хотя бы одному контакту, его статус archived,

Мой босс предлагает разделить сообщения three tables названный

проект,

запланировано и

архив.

На практике почти каждый раз, когда вы ищете message в БД для отправки (status is 'draft'), таблица содержит большое количество ненужных данных (сообщения со статусом "заархивировано"). Но, если я разделю таблицу, каждый раз, когда я изменяю статус сообщения, я должен вставить его в соответствующую таблицу, и delete от текущего status Таблица.

Поскольку я не слышал о такой практике раньше, я прошу мнение. Это действительно для split столы? заранее спасибо

2 ответа

Вам не нужно разделять таблицы для этого. Для оптимизированных запросов вы должны добавить больше индексов, в частности, вы можете использовать индекс в столбце status_id. Также я не вижу смысла в том, чтобы иметь статусы в отдельной таблице. если вам нужен заголовок, вы можете использовать его как status_id, в противном случае вы можете просто использовать обычное целое число.

На мой взгляд, это создает ненужные накладные расходы при обработке ваших сообщений. Использование status_id для фильтрации ваших результатов должно обеспечить то, что вам нужно, чтобы найти сообщения в состоянии "черновик". Пока у вас есть правильные индексы на вашей таблице, производительность не должна быть проблемой. В какой-то момент, в зависимости от объема, вы МОЖЕТЕ по-настоящему заархивировать эти сообщения в другую таблицу, но это чисто проектное соображение. Это зависит от того, нужно ли вам хранить записи этих сообщений в течение определенного периода времени.

Другие вопросы по тегам