Pytanie o SARGability

11

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:

  1. Indeksy nie będą używane z powodu manipulacji kolumną
  2. Plany zapytań będą się różnić częściowo z powodu powyższego (nie przetestowane, zakładając, że tak)
  3. 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?

Stuart Blackler
źródło

Odpowiedzi:

6
  1. poprawny
  2. niekoniecznie - zależy to od tego, czy istnieje odpowiedni indeks i czy CBO zdecyduje się go użyć. Na przykład, jeśli tabela jest niewielka lub statystyki wskazują, że optymalizator wierzy, że filtr będzie prawdziwy dla dużego odsetka wyników, może uznać, że koszt FTS jest niższy
  3. nie jest to gwarantowane - możliwe jest nawet, że drugie zapytanie będzie działało gorzej - ale twoje rozumowanie jest zasadniczo prawidłowe. Na przykład w skrajnym przypadku, gdy FTS byłby rzeczywiście szybszy, CBO może zamiast tego wybrać skanowanie indeksu w oparciu o najlepsze przypuszczenie o koszcie - co zawsze jest tylko szacunkiem

Trochę googlingu wywołało to pytanie SO i ten interesujący artykuł o SARGability

Jack mówi, że spróbuj topanswers.xyz
źródło
5

Jack ma rację, więc nie powtórzę tego.

Dodam tylko kilka artykułów, które lubię, dotyczące możliwości wyrażenia:

Wszyscy są świetnymi pisarzami z dużym doświadczeniem w SQL Server.

Marian
źródło