Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

SQL Server n'utilise pas d'index comparant datetime à not null

C'est normal. Il n'utilisera l'index que si le prédicat est suffisamment sélectif pour le justifier.

Il semble que la grande majorité des enregistrements ne soient pas NULL, donc au lieu de les trouver via l'index non clusterisé, il faut alors faire des charges de recherches de signets et d'E/S aléatoires pour récupérer le reste des colonnes à renvoyer, c'est plus rapide et plus efficace pour analysez simplement l'intégralité de l'index clusterisé.

Vous pouvez utiliser FORCESEEK forcer le comportement que vous dites vouloir. Vous constaterez probablement que le temps pris et les statistiques d'E/S explosent par rapport à l'analyse de l'index clusterisé.

SET STATISTICS IO ON

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