Ich muss nur bestätigen, dass ich etwas richtig verstehe:
Ich habe kürzlich eine SO-Frage angesehen, in der ein Benutzer eine Antwort in Linq gepostet hat:
from p in db.table where p.column.AddMinutes(1) > DateTime.Now select p
Für diejenigen, die mit Linq nicht vertraut sind, würde ich erwarten, dass das Ergebnis dieser Aussage (nicht auf Fairness geprüft) ist:
SELECT *
FROM table t
WHERE DATEADD(min, 1, t.column) >= GETDATE()
Ich habe eine Antwort auf diese Aussage gepostet, dass die Datums- / Uhrzeitmanipulation (in diesem Fall GETDATE()
) für die Variable erfolgen sollte, sodass die Anweisung tatsächlich Folgendes widerspiegeln sollte:
SELECT *
FROM table t
WHERE t.column >= DATEADD(min, -1, GETDATE())
In meiner Antwort nehmen die Teile, bei denen ich mir jetzt nicht sicher bin, Folgendes an:
- Indizes werden aufgrund der Manipulation der Spalte nicht verwendet
- Die Abfragepläne unterscheiden sich teilweise aufgrund der oben genannten (nicht getestet, vorausgesetzt, dies)
- Aus diesem Grund ist die erste Abfrage tatsächlich schlechter als die zweite.
Meine Frage:
Habe ich etwas in meinen Überlegungen verpasst? Hab ich recht? Hat irgendjemand gute Artikel über SARGability?