В настоящее время у нас есть сценарий, в котором одна таблица фактически имеет несколько (от 10 до 15) логических флагов (не обнуляемые битовые
поля) . К сожалению, на самом деле невозможно слишком сильно упростить это на логическом уровне, потому что допустима любая комбинация логических значений.
Рассматриваемая таблица является транзакционной таблицей, которая может содержать десятки миллионов строк, и производительность как при вставке, так и при выборе очень важна. Хотя в настоящее время мы не совсем уверены в распределении данных, комбинация всех флагов должна обеспечить относительно хорошую мощность множества, то есть сделать его "полезным" индексом для SQL Server.
Типичные сценарии выборочного запроса может быть выбор записей только на основе 3 или 4 флагов, например ГДЕ ФЛАГ3 = 1 И ФЛАГ7 = 0 И ФЛАГ9 = 1
. Было бы нецелесообразно создавать отдельные индексы для всех комбинаций флагов, используемых этими запросами на выборку, поскольку их будет много.
В данной ситуации, какой подход рекомендуется для эффективного индексирования этих полей? Стол новый,так что пока нет существующих данных, о которых стоит беспокоиться, и у нас есть изрядная гибкость в фактической реализации таблицы.
В настоящее время мы рассматриваем два основных варианта:
int
, которые будут использоваться всегда). Меня беспокоит то, что, учитывая типичное использование только нескольких полей, этот подход пропустит индекс и прибегнет к сканированию таблицы. Назовем это Вариант A (Прочитав некоторые ответы, кажется, что этот подход не будет работать, так как порядок полей в индексе будет иметь значение, делая невозможным эффективное индексирование для ВСЕХ поля). В настоящий момент мы сильно склоняемся к Варианту B . Для полноты, это будет работать на SQL Server 2008.
Мы будем очень благодарны за любые советы.
Изменить: орфография, ясность, пример запроса, дополнительная информация по Вариант B .
.