#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
это логическое значение, то фильтрация с использованием индекса (обычно) возвращает около половины строк в таблице. И это не очень избирательно.
Тем не менее, я могу подумать о трех соображениях:
state
также может быть частью индекса. Это(state, code)
было бы уместно для обоих ваших запросов.state
в качестве первого столбца в кластеризованном индексе иногда может быть полезно.- Если одно из значений встречается довольно редко, и это то, что вы хотите отфильтровать, тогда индекс может быть полезен.