Старый наставник однажды сказал мне размещать индексы для большинства вещей, для которых вы используете предложение WHERE.
WHERE
Должен ли я поставить индекс на BOOL/TINYINT?В таблице, с которой я работаю, их содержится значительное количество, и часто результаты фильтруются по 1-20 из этих логических условий.
BOOL/TINYINT
Существует одна ситуация, в которой может быть полезен индекс для логического поля (или другого поля с низкой мощностью).Если одного из этих значений относительно мало (например, 10 ИСТИННЫХ значений из миллиона), и вы ищете эти несколько значений довольно часто, тогда будет полезен индекс.
Вы обычно не хотите индексировать по крайней мере логическое значение.Однако создание частичного индекса над чем-то другим с булевой проверкой в качестве предиката может быть одним из наиболее эффективных доступных вариантов индексирования - если ваше логическое поле вырезает много данных из индекса.Это часто намного эффективнее, чем комбинированный индекс с другим столбцом.
Вы можете индексировать комбинацию полей.
Индексирование на Bool1 может быть бессмысленным, потому что есть только 2 значения. Индексирование по Bool1, Bool2, Bool3, Bool4, Bool5 ... Bool16 имеет 2 ^ 16 значений.
Я не могу говорить о крошечных целых числах (это вполне может быть тем же самым), но я не буду индексировать логические значения по той простой причине, что они могут принимать только два значения.
Насколько я помню, вы хотите использовать индексы для столбцов с высокой кардинальностью. Какой смысл иметь индекс для столбца, который может принимать только два разных значения? Это пустая трата пространства без реальной выгоды.
Я также рекомендую Какие рекомендации и «практические правила» для создания индексов базы данных? для дальнейшего чтения.
Как уже указывали некоторые, вы можете рассмотреть возможность включения индекса в набор условий; какие из них зависят от вашего запроса.