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

Qu'est-ce qui rend une instruction SQL sargable ?

La chose la plus courante qui rendra une requête non-sargable est d'inclure un champ dans une fonction dans la clause where :

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

L'optimiseur SQL ne peut pas utiliser d'index sur myDate, même s'il en existe un. Il devra littéralement évaluer cette fonction pour chaque ligne du tableau. Bien mieux à utiliser :

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

Quelques autres exemples :

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())