Если селективность столбца очень низкая (т. Е. Не так много разных значений), то оптимизатор запросов вряд ли будет использовать индекс для этого столбца.
Но, скажем, у вас есть столбец Active
(или другой столбец с несколькими различными значениями), и большинство записей были активны и только несколько неактивны (т. е. Active
равно false
), тогда запрос с критериями WHERE Active = False
может использовать индекс для Active
колонка.[Для SQL Server точка среза составляет приблизительно 10% строк]
Есть также другие эвристики для воспроизведения в индексах с несколькими столбцами (и зависит от вашей СУБД)
Например: Индексирование SQL Server: использование BIT-столбца с низкой избирательностью в первую очередь может быть лучшей стратегией (Спасибо, Дэмиен)
SQL Server 2008 и выше, имеет возможность создавать «Отфильтрованные индексы» для подмножеств данных:
Когда столбец имеет только небольшое количество релевантных значений для запросов, вы можете создать отфильтрованный индекс для подмножества значений.Например, когда значения в столбце в основном равны NULL, а запрос выбирается только из значений, отличных от NULL, вы можете создать отфильтрованный индекс для строк данных, отличных от NULL.Полученный индекс будет меньше и будет стоить дешевле в обслуживании, чем некластеризованный индекс полной таблицы, определенный для тех же ключевых столбцов.