Имеет ли смысл создавать индекс по полю с меньшей изменчивостью? - PullRequest
1 голос
/ 27 апреля 2010

Я слышал мнение, что нет смысла создавать индексы, когда поле имеет меньшую изменчивость.
Например, если он хранит только значения A, B, C, D , то такой индекс не принесет пользы, и в дальнейшем больше SQL-серверов вообще не будут его использовать при выполнении запроса.

Интересно, ваше мнение по этому поводу?

EDIT

Пример использования

Select * FROM Table WHERE Status = 'A'   -- A means Active

или комбинация с другими полями

Select * FROM Table WHERE Group_ID = 123 AND Status = 'A'   

Ответы [ 3 ]

2 голосов
/ 27 апреля 2010

Общий совет заключается в том, что индекс для поля low-cardinality редко будет полезен.

Индексы B-дерева наиболее эффективны для данных с большим количеством элементов (т. Е. Столбцов с множеством возможных значений, где данные в столбце уникальны или почти уникальны).

Некоторые движки баз данных, такие как Oracle и PostgreSQL, поддерживают Индексы растровых изображений . Традиционно считалось, что растровые индексы хорошо работают для таких данных, как пол (мужской или женский), который имеет небольшое количество различных значений, но во многих случаях эти значения.


ОБНОВЛЕНИЕ:

В дополнение к примеру использования, обратите внимание, что для вашего второго запроса, вероятно, будет достаточно индекса по Group_ID.

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

1 голос
/ 27 апреля 2010

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

0 голосов
/ 27 апреля 2010

Ты когда-нибудь собираешься использовать этот столбец сам по себе? Как это:

SELECT TheCol FROM Mytable WHERE myCol = 'A'

Если нет, то он будет охватывающим или составным и может принести пользу запросам , содержащим этот столбец.

Трудно сказать без дополнительной информации

Изменить: если вы делаете SELECT * все ставки в любом случае отключены. Однако может помочь индекс по обоим столбцам для второго.

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