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

SQL Server no usa un índice que compara la fecha y la hora con no nulo

Esto es normal. No usará el índice a menos que el predicado sea lo suficientemente selectivo como para justificarlo.

Parece que la gran mayoría de los registros no son NULOS, por lo que en lugar de encontrarlos a través del índice no agrupado y luego tener que hacer un montón de búsquedas de marcadores y E/S aleatorias para recuperar el resto de las columnas para devolverlo, es más rápido y más eficiente para simplemente escanee todo el índice agrupado.

Puedes usar FORCESEEK para forzar el comportamiento que dices que quieres. Es probable que descubra que el tiempo necesario y las estadísticas de E/S se disparan en comparación con el análisis de índice agrupado.

SET STATISTICS IO ON

SELECT * FROM 
YourTable WITH (FORCESEEK) 
WHERE YourCol IS NOT NULL