sql >> Database >  >> RDS >> Sqlserver

Wat maakt een SQL-statement sargable?

De meest voorkomende oorzaak van een zoekopdracht niet-sargeerbaar is om een ​​veld op te nemen in een functie in de waar-clausule:

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

De SQL-optimizer kan geen index op myDate gebruiken, zelfs niet als die bestaat. Het zal deze functie letterlijk voor elke rij van de tabel moeten evalueren. Veel beter te gebruiken:

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

Enkele andere voorbeelden:

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


  1. 2017 @ Multiplenines:de verhalen van onze klanten vieren

  2. Sorteer op dag van de week van maandag tot zondag

  3. Waarom elk klein bedrijf een database nodig heeft

  4. Zijn er nadelen aan het altijd gebruiken van nvarchar(MAX)?