Вопрос проверяет понимание принципов работы индексов и оптимизации запросов в базах данных.
Индексы эффективны, когда они хорошо отфильтровывают данные.
Поля с малым количеством значений имеют низкую селективность.
По такому индексу выбирается слишком много строк.
Планировщик часто предпочитает full scan.
Индекс в таких случаях не даёт выигрыша.
Эффективность индекса напрямую связана с селективностью данных.
Селективность показывает:
насколько хорошо условие отбирает строки
какую долю таблицы возвращает запрос
Пример низкой селективности:
status = ACTIVE / INACTIVE
gender = M / F
При низкой кардинальности:
индекс указывает на большое количество строк
требуется много обращений к таблице
overhead превышает пользу
В результате:
планировщик выбирает последовательное сканирование
Индекс может быть оправдан:
в составном индексе
при частых комбинированных фильтрах
для частичных индексов
Индексы на поля с малым количеством значений редко эффективны сами по себе и требуют осознанного применения.