Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

SQL Server verwendet keinen Index, der datetime mit nicht null vergleicht

Das ist normal. Es wird den Index nicht verwenden, es sei denn, das Prädikat ist selektiv genug, um dies zu rechtfertigen.

Es hört sich so an, als ob die überwiegende Mehrheit der Datensätze nicht NULL ist. Anstatt diese über den nicht gruppierten Index zu finden, müssen Sie dann viele Lesezeichensuchen und zufällige E / A durchführen, um die restlichen Spalten abzurufen, um sie zurückzugeben. Dies ist schneller und effizienter Scannen Sie einfach den gesamten Clustered-Index.

Sie können FORCESEEK verwenden um das Verhalten zu erzwingen, von dem Sie sagen, dass Sie es wollen. Sie werden wahrscheinlich feststellen, dass der Zeitaufwand und die E/A-Statistiken im Vergleich zum Clustered-Index-Scan durch die Decke gehen.

SET STATISTICS IO ON

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