Je dois juste confirmer que je comprends bien quelque chose:
J'ai récemment vu une question SO dans laquelle un utilisateur a posté une réponse dans Linq comme:
from p in db.table where p.column.AddMinutes(1) > DateTime.Now select p
Pour ceux qui ne connaissent pas Linq, je m'attendrais à ce que la sortie de cette déclaration (non testée en toute équité) soit:
SELECT *
FROM table t
WHERE DATEADD(min, 1, t.column) >= GETDATE()
J'ai posté une réponse à cela en disant que la manipulation datetime devrait être sur la variable (dans ce cas GETDATE()
) donc en fait l'instruction devrait refléter quelque chose comme:
SELECT *
FROM table t
WHERE t.column >= DATEADD(min, -1, GETDATE())
Dans ma réponse, les bits dont je ne suis plus sûr, supposons ce qui suit:
- Les index ne seront pas utilisés à cause de la manipulation de la colonne
- Les plans de requête seront différents en partie à cause de ce qui précède (non testé, en supposant que oui)
- En raison de ce qui précède, la 1ère requête sera en fait moins bonne que la 2ème.
Ma question:
Ai-je oublié quelque chose dans mon raisonnement? Ai-je raison? Enfin, un organisme a-t-il de bons articles sur la SARGabilité?
la source