Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

O que torna uma instrução SQL sargável?


A coisa mais comum que fará uma consulta não-sargable é incluir um campo dentro de uma função na cláusula where:
SELECT ... FROM ...
WHERE Year(myDate) = 2008

O otimizador SQL não pode usar um índice em myDate, mesmo que exista. Ele literalmente terá que avaliar essa função para cada linha da tabela. Muito melhor usar:
WHERE myDate >= '01-01-2008' AND myDate < '01-01-2009'

Alguns outros exemplos:
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())