Есть ли точка индексации столбца базы данных, который не имеет много разных значений? - PullRequest
3 голосов
/ 26 мая 2011

Например, предположим, у меня есть столбец TYPE, который принимает только несколько значений.У меня есть вопросы, такие как

WHERE TYPE=...

Будет ли индексирование этого столбца улучшать производительность?

1 Ответ

4 голосов
/ 26 мая 2011

Если селективность столбца очень низкая (т. Е. Не так много разных значений), то оптимизатор запросов вряд ли будет использовать индекс для этого столбца.

Но, скажем, у вас есть столбец Active (или другой столбец с несколькими различными значениями), и большинство записей были активны и только несколько неактивны (т. е. Active равно false), тогда запрос с критериями WHERE Active = False может использовать индекс для Activeколонка.[Для SQL Server точка среза составляет приблизительно 10% строк]

Есть также другие эвристики для воспроизведения в индексах с несколькими столбцами (и зависит от вашей СУБД)

Например: Индексирование SQL Server: использование BIT-столбца с низкой избирательностью в первую очередь может быть лучшей стратегией (Спасибо, Дэмиен)

SQL Server 2008 и выше, имеет возможность создавать «Отфильтрованные индексы» для подмножеств данных:

Когда столбец имеет только небольшое количество релевантных значений для запросов, вы можете создать отфильтрованный индекс для подмножества значений.Например, когда значения в столбце в основном равны NULL, а запрос выбирается только из значений, отличных от NULL, вы можете создать отфильтрованный индекс для строк данных, отличных от NULL.Полученный индекс будет меньше и будет стоить дешевле в обслуживании, чем некластеризованный индекс полной таблицы, определенный для тех же ключевых столбцов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...