Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

Por que essa consulta não usa o índice adequado?


Ele não sabe qual será o valor das variáveis ​​quando compilar a consulta. Você pode tentar OPTION (RECOMPILE) .

Presumo que a adição do AND cláusula na consulta (mesmo que logicamente não a torne mais seletiva) deve induzir o otimizador a estimar a consulta com maior seletividade, dando a você o plano que você queria!

Você diz nos comentários que a versão sem o ExceptionDate = ExceptionDate é estimado em 88234.8 linhas e a versão com 8823.48

Geralmente, na ausência de estatísticas utilizáveis, o SQL Server retorna à heurística dependendo do tipo de operador de comparação no predicado.

Ele assume que um > predicado retornará 30% das linhas, por exemplo, e que um = o predicado retornará 10% das linhas, então parece que está apenas aplicando isso diretamente ao resultado da primeira estimativa. Interessante que não leva em conta o fato de que o igual é contra a própria coluna aqui!

c.f. Práticas recomendadas para gerenciar estatísticas - Evite o uso de variáveis ​​locais em consultas a>