Создать индекс по типу сообщения:
CREATE INDEX IX_Messages_MessageType ON Messages (MessageType)
Затем, чтобы получить список уникальных типов сообщений , вы запускаете:
SELECT DISTINCT MessageType
FROM Messages
ORDER BY MessageType
Поскольку индекс физически отсортирован в порядке MessageType SQL Server может очень быстро и эффективно сканировать индекс, выбирая список уникальных типов сообщений.
Это неплохое исполнение - это то, в чем SQL Server хорош.
По общему признанию, вы можете сэкономить место, имея таблицу " типы сообщений ". И если вы одновременно отображаете только несколько сообщений: тогда поиск по закладке , так как он возвращается к таблице MessageTypes
, не будет проблемой. Но если вы начнете отображать сотни или тысячи сообщений одновременно, то соединение с MessageTypes может стать довольно дорогим и ненужным, и будет быстрее хранить MessageType
вместе с сообщением.
Но у меня не было бы проблем с созданием индекса для столбца MessageType
и выбором distinct
. SQL Server любит такие вещи. Но если вы обнаружите, что это реальная нагрузка на ваш сервер, как только вы получаете десятки попаданий в секунду, следуйте другому совету и кешируйте их в памяти.
Мое личное решение будет:
- создать индекс
- выберите отличный
и если у меня все еще были проблемы
- кэш в памяти, срок действия которого истекает через 30 секунд
Что касается нормализованного / денормализованного вопроса. Нормализация экономит место за счет использования ЦП, когда соединения выполняются постоянно. Но логическая точка денорализации состоит в том, чтобы избежать дублирования данных, что может привести к противоречивым данным.
Планируете ли вы изменить текст сообщения типа, который, если вы сохранили с сообщениями, вам придется обновить все строки?
Или можно что-то сказать о том, что на момент сообщения тип сообщения был «Запрос клиента отправлен»?