Должен ли индекс быть размещен в столбце состояния для таблицы?

#mysql #sql #mariadb

#mysql #sql #mariadb

Вопрос:

Пример таблицы :

 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;
 

Поможет ли производительности запросов (стандартные варианты использования) размещение индекса в столбце состояния для этого примера?

Комментарии:

1. Зависит от небольшой базы данных, оптимизатор может не использовать index..

Ответ №1:

В общем, индекс в столбце с очень небольшим количеством значений не особенно полезен. Если state это логическое значение, то фильтрация с использованием индекса (обычно) возвращает около половины строк в таблице. И это не очень избирательно.

Тем не менее, я могу подумать о трех соображениях:

  1. state также может быть частью индекса. Это (state, code) было бы уместно для обоих ваших запросов.
  2. state в качестве первого столбца в кластеризованном индексе иногда может быть полезно.
  3. Если одно из значений встречается довольно редко, и это то, что вы хотите отфильтровать, тогда индекс может быть полезен.