Muszę tylko potwierdzić, że rozumiem coś poprawnie:
Ostatnio widziałem pytanie SO, w którym użytkownik opublikował odpowiedź w Linq, na przykład:
from p in db.table where p.column.AddMinutes(1) > DateTime.Now select p
Dla tych, którzy nie są zaznajomieni z Linq, oczekiwałbym, że efektem tego oświadczenia (a nie przetestowania go w sposób uczciwy) będzie:
SELECT *
FROM table t
WHERE DATEADD(min, 1, t.column) >= GETDATE()
Wysłałem odpowiedź na to stwierdzenie, że manipulacja datetime powinna dotyczyć zmiennej (w tym przypadku GETDATE()
), więc w rzeczywistości instrukcja powinna odzwierciedlać coś takiego:
SELECT *
FROM table t
WHERE t.column >= DATEADD(min, -1, GETDATE())
W mojej odpowiedzi bity, których teraz nie jestem pewien, zakładają, co następuje:
- Indeksy nie będą używane z powodu manipulacji kolumną
- Plany zapytań będą się różnić częściowo z powodu powyższego (nie przetestowane, zakładając, że tak)
- Z tego powodu pierwsze zapytanie będzie działało gorzej niż drugie.
Moje pytanie:
Czy coś mi umknęło w rozumowaniu? Mam rację? Wreszcie, czy jakikolwiek organ ma jakieś dobre artykuły na temat SARGability?
źródło