Пример таблицы:
promo.code : varchar : unique index
promo.type : tinyint
promo.quantity : int
promo.start : datetime
promo.end : datetime
promo.state : tinyint / bool
Примеры запросов, которые необходимо выполнить:
SELECT * FROM promo WHERE state = 1;
SELECT * FROM promo WHERE code = 'test' AND state = 1;
Повысит ли производительность запросов (стандартные варианты использования) размещение индекса в столбце состояния для этого примера?
В общем, индекс для столбца с очень небольшим количеством значений не особенно полезен. Если state
является логическим значением, то фильтрация с использованием индекса (обычно) возвращает около половины строк в таблице. И это не очень избирательно.
Тем не менее, я могу думать о трех соображениях:
state
также может быть частью индекса. Так что (state, code)
подходит для обоих ваших запросов.state
поскольку первый столбец в кластеризованном индексе иногда может быть полезен.
Зависит от небольшого оптимизатора БД, который может не использовать индекс.