Só preciso confirmar que entendi algo corretamente:
Recentemente, eu vi uma pergunta SO na qual um usuário postou uma resposta no Linq, como:
from p in db.table where p.column.AddMinutes(1) > DateTime.Now select p
Para aqueles que não estão familiarizados com o Linq, eu esperaria que a saída dessa declaração (não a testasse com justiça) seja:
SELECT *
FROM table t
WHERE DATEADD(min, 1, t.column) >= GETDATE()
Postei uma resposta dizendo que a manipulação de data e hora deve estar na variável (neste caso GETDATE()
); portanto, a declaração deve refletir algo como:
SELECT *
FROM table t
WHERE t.column >= DATEADD(min, -1, GETDATE())
Na minha resposta, os bits dos quais não tenho certeza agora assumem o seguinte:
- Os índices não serão utilizados devido à manipulação da coluna
- Os planos de consulta serão diferentes em parte devido ao acima exposto (não testado, supondo que sim)
- Por causa do exposto, a primeira consulta terá um desempenho pior que a segunda.
Minha pergunta:
Perdi alguma coisa no meu raciocínio? Estou correcto? Por fim, alguém tem bons artigos sobre SARGability?
fonte