sql >> Base de Datos >  >> RDS >> Sqlserver

¿Por qué esta consulta no utiliza el índice adecuado?

No sabe cuál será el valor de las variables cuando compila la consulta. Podrías probar OPTION (RECOMPILE) .

Supongo que la adición de AND cláusula en la consulta (aunque lógicamente no la hace más selectiva en absoluto) debe engañar al optimizador para que estime la consulta con mayor selectividad y así obtener el plan que deseaba.

Usted dice en los comentarios que la versión sin ExceptionDate = ExceptionDate se estima en 88234.8 filas y la versión con 8823.48

Generalmente, en ausencia de estadísticas utilizables, SQL Server recurre a la heurística que depende del tipo de operador de comparación en el predicado.

Asume que un > predicado devolverá el 30% de las filas, por ejemplo, y que un = el predicado devolverá el 10% de las filas, por lo que parece que solo está aplicando eso directamente al resultado de la primera estimación. ¡Es interesante que no tenga en cuenta el hecho de que los iguales están en contra de la columna misma aquí!

cf Prácticas recomendadas para administrar estadísticas:evite el uso de variables locales en las consultas