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

Was macht eine SQL-Anweisung sargable?

Die häufigste Sache, die eine Abfrage nicht-sargbar macht besteht darin, ein Feld in eine Funktion einzufügen in der where-Klausel:

SELECT ... FROM ...
WHERE Year(myDate) = 2008

Der SQL-Optimierer kann keinen Index für myDate verwenden, selbst wenn einer vorhanden ist. Es muss diese Funktion buchstäblich für jede Zeile der Tabelle auswerten. Viel besser zu verwenden:

WHERE myDate >= '01-01-2008' AND myDate < '01-01-2009'

Einige andere Beispiele:

Bad: Select ... WHERE isNull(FullName,'Ed Jones') = 'Ed Jones'
Fixed: Select ... WHERE ((FullName = 'Ed Jones') OR (FullName IS NULL))

Bad: Select ... WHERE SUBSTRING(DealerName,4) = 'Ford'
Fixed: Select ... WHERE DealerName Like 'Ford%'

Bad: Select ... WHERE DateDiff(mm,OrderDate,GetDate()) >= 30
Fixed: Select ... WHERE OrderDate < DateAdd(mm,-30,GetDate())