Как рассчитать селективность столбцов - PullRequest
4 голосов
/ 17 декабря 2009

Я хочу создать индекс для таблицы и пытаюсь определить порядок столбцов в индексе на основе селективности по столбцам.

Так, что наиболее селективный столбец (тот, который сужает дальнейшие варианты выбора больше всего) будет первым в индексе, за которым следует второй наиболее селективный столбец и т. Д.

Как рассчитать селективность столбца?

Ответы [ 2 ]

7 голосов
/ 17 декабря 2009

Это простое соотношение для каждого столбца:

(Количество уникальных значений для столбца) до (Количество строк в таблице)

Расчет чисел зависит от вашей РСУБД. Для SQL Server вы можете получить следующие числа:

SELECT COUNT(DISTINCT ColumnName) FROM TableName

SELECT COUNT(*) FROM TableName
0 голосов
/ 06 января 2015

В обычных ситуациях Рандольфо прав. Но может возникнуть ситуация, когда у SELECT COUNT(*), ColumnName будет что-то вроде
10000 A
2 B
2 C
2 D
и COUNT(*), ColumnName2 будет иметь
2 A1
2 B1
2 C1

По вашей формуле ColumnName имеет более высокую селективность, однако для индекса лучше включить ColumnName2 в качестве первого столбца в индексе.

Логика примерно такая: после фильтрации по первому столбцу у вас, вероятно, будет 10000 результатов, но при фильтрации по ColumnName2 вы получите 2 результата. Меньше работы для сервера, чтобы найти точные данные.

...