Zastrzeżenie: wszystko poniżej jest tylko anegdotyczne i zaczerpnięte bezpośrednio z mojego osobistego doświadczenia. Każdy, kto czuje się na siłach, aby przeprowadzić bardziej rygorystyczną analizę empiryczną, może ją przeprowadzić i głosować przeciw. Zdaję sobie również sprawę, że SQL jest językiem deklaratywnym i nie powinieneś zastanawiać się, JAK przetwarzany jest twój kod, kiedy go piszesz, ale ponieważ cenię swój czas, tak.
Istnieje nieskończona liczba logicznie równoważnych instrukcji, ale rozważę trzy (ish).
Przypadek 1: Dwa porównania w standardowej kolejności (ustalona kolejność oceny)
A> = MinBound AND A <= MaxBound
Przypadek 2: cukier syntaktyczny (kolejność oceny nie jest wybierana przez autora)
POMIĘDZY MinBound I MaxBound
Przypadek 3: Dwa porównania w uporządkowanej kolejności (kolejność oceny wybrana podczas pisania)
A> = MinBound AND A <= MaxBound
Lub
A <= MaxBound AND A> = MinBound
Z mojego doświadczenia wynika, że przypadek 1 i przypadek 2 nie mają żadnych spójnych ani zauważalnych różnic w wydajności, ponieważ nie znają zestawu danych.
Jednak przypadek 3 może znacznie skrócić czas wykonywania. W szczególności, jeśli pracujesz z dużym zestawem danych i zdarza się, że masz pewną heurystyczną wiedzę na temat tego, czy A jest bardziej prawdopodobne, że będzie większe niż MaxBound, czy mniejsze niż MinBound , możesz znacznie poprawić czasy wykonywania, używając przypadku 3 i porządkując porównania odpowiednio.
Jednym z moich przypadków użycia jest odpytywanie dużego historycznego zbioru danych z nieindeksowanymi datami dla rekordów w określonym przedziale czasu. Pisząc zapytanie, będę wiedział, czy istnieje więcej danych PRZED określonym interwałem lub PO określonym interwale i mogę odpowiednio uporządkować moje porównania. Czas wykonania został skrócony nawet o połowę w zależności od rozmiaru zbioru danych, złożoności zapytania i liczby rekordów przefiltrowanych przez pierwsze porównanie.