SQL Server 2005 индексы и низкая мощность - PullRequest
1 голос
/ 11 апреля 2010

Как SQL Server определяет, имеет ли столбец таблицы низкий уровень мощности?

Причина, по которой я спрашиваю, заключается в том, что оптимизатор запросов, скорее всего, не будет использовать индекс по столбцу пола (значения «m» и «f»). Тем не менее, как это определит мощность столбца гендерных факторов для принятия этого решения?

Вдобавок к этому, если в маловероятном случае, когда у меня в таблице будет миллион записей и только одна запись в столбце пола была 'm', сервер SQL сможет определить это и использовать индекс для извлечения один ряд? Или он просто знает, что в столбце есть только 2 различных значения и не использует индекс?

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

Большое спасибо.

1 Ответ

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

См. Статистика, используемая оптимизатором запросов в Microsoft SQL Server 2005 .

С 1 значением «m» и 999999 «f» статистика даст оценку мощности 1 для «m» и что-то близкое к 1M для «f». Но то, будет ли индекс использоваться или нет, есть и другие факторы.

Как правило, такой столбец с низкой селективностью не имеет смысла только для индекса. Однако он имеет смысл как крайний левый столбец в более сложном индексе и даже как крайний левый столбец в кластеризованном индексе. И даже если столбец будет иметь смысл для «m», а не для «f», автоматическая параметризация запроса может подействовать на вас и вместо этого сгенерировать план для переменной @gender.

Вам придется либо читать больше, либо сообщать подробности. Некоторые хорошие ресурсы - блоги команды QO и членов команды:

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