sql >> Base de Datos >  >> RDS >> Sqlserver

¿Qué hace que una declaración SQL sea sargable?

Lo más común que hará que una consulta no sea sargable es incluir un campo dentro de una función en la cláusula where:

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

El optimizador de SQL no puede usar un índice en myDate, incluso si existe uno. Literalmente tendrá que evaluar esta función para cada fila de la tabla. Mucho mejor usar:

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

Algunos otros ejemplos:

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