Я создаю веб-приложение для работы с электронной почтой, и у меня возникают проблемы с созданием схемы, которая быстро подсчитает количество непрочитанных писем на папку.
Моя схема на данный момент выглядит следующим образом:
CREATE TABLE emails(id INT, user_id INT, folder INT,
read_on TIMESTAMP, raw_email_filename VARCHAR(128));
Чтобы получить счетчик непрочитанных для каждой папки, я мог бы выполнить запрос вроде:
SELECT count(*) FROM email WHERE user_id =? AND folder IN (?..) AND read_on IS NULL;
Но для этого нужно было бы просмотреть все электронные письма в каждой папке, чтобы получить счетчик, учитывая мой индексis (user_id, folder)
.
Я думал о добавлении индекса (user_id, folder, read_on)
, но в нем было бы слишком много записей для read_on
, когда меня интересуют только значения NULL
для read_on
.
Есть ли лучший способ сделать это?Может быть, с нормализацией?Вести счет в Redis или что-то?