Следует ли помещать индекс в столбец состояния для таблицы?

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

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;

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

Зависит от небольшого оптимизатора БД, который может не использовать индекс.

P.Salmon 15.12.2020 16:33
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для
В последние годы архитектура микросервисов приобрела популярность как способ построения масштабируемых и гибких приложений. Laravel , популярный PHP...
Как построить CRUD-приложение в Laravel
Как построить CRUD-приложение в Laravel
Laravel - это популярный PHP-фреймворк, который позволяет быстро и легко создавать веб-приложения. Одной из наиболее распространенных задач в...
Освоение PHP и управление базами данных: Создание собственной СУБД - часть II
Освоение PHP и управление базами данных: Создание собственной СУБД - часть II
В предыдущем посте мы создали функциональность вставки и чтения для нашей динамической СУБД. В этом посте мы собираемся реализовать функции обновления...
Документирование API с помощью Swagger на Springboot
Документирование API с помощью Swagger на Springboot
В предыдущей статье мы уже узнали, как создать Rest API с помощью Springboot и MySql .
Роли и разрешения пользователей без пакета Laravel 9
Роли и разрешения пользователей без пакета Laravel 9
Этот пост изначально был опубликован на techsolutionstuff.com .
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
В предыдущей статье мы завершили установку базы данных, для тех, кто не знает.
0
1
92
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

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

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

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

Другие вопросы по теме