Pergunta

Como o SQL Server determina se uma coluna de tabela tem baixa cardinalidade?

A razão pela qual pergunto é porque o Otimizador de consulta provavelmente não usaria um índice em uma coluna de gênero (valores 'm' e 'f'). No entanto, como determinaria a cardinalidade da coluna de gênero para chegar a essa decisão?

Além disso, se no evento improvável que eu tivesse um milhão de entradas na minha mesa e apenas uma entrada na coluna de gênero fosse 'M', o SQL Server seria capaz de determinar isso e usar o índice para recuperar essa linha única? Ou saberia que existem apenas 2 valores distintos na coluna e não usar o índice?

Agradeço o exposto acima discute algum design ruim do banco de dados, mas estou apenas tentando entender como o Otimizador de Query chega às suas decisões.

Muito Obrigado.

Foi útil?

Solução

Ver Estatísticas usadas pelo otimizador de consulta no Microsoft SQL Server 2005 .

Com 1 valor 'm' e 999999 'f', as estatísticas fornecerão uma estimativa de cardinalidade de 1 para 'm' e algo próximo de 1m para 'f'. Mas que se o índice será usado ou não, existem mais fatores.

Em geral, uma coluna de seletividade tão baixa não faz sentido apenas em um índice. No entanto, faz sentido como uma coluna mais à esquerda em um índice mais complexo e mesmo como uma coluna mais à esquerda no índice cluster. E mesmo que uma coluna faria sentido para 'm' e não para 'f', a parametrização automática de consulta pode fazer um truque em você e gerar um plano para um variável @Gender.

Você terá que ler mais ou dar mais detalhes. Alguns bons recursos são os blogs de equipes de Qo e membros da equipe:

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top