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