BETWEEN powinien przewyższa IN w tym przypadku (ale tak mierzyć i sprawdzać również plany wykonania!), zwłaszcza jako n rośnie, a statystyki są nadal dokładne. Załóżmy:
mto rozmiar twojego stołunto rozmiar twojego asortymentu
Indeks może być użyty (n jest mały w porównaniu do m )
-
Teoretycznie
BETWEENmożna zaimplementować za pomocą pojedynczego „skanowania zakresu” (mówienie Oracle) na indeksie klucza podstawowego, a następnie przejść co najwyżejnwęzły liści indeksu. Złożoność będzie wynosićO(n + log m) -
INjest zwykle implementowany jako seria (pętla)n„skanowanie zakresu” w indeksie klucza podstawowego. Zmbędąc rozmiarem tabeli, złożoność zawsze będzie wynosićO(n * log m)... co zawsze jest gorsze (nieistotne dla bardzo małych tabelmlub bardzo małe zakresyn)
Nie można użyć indeksu (n to znaczna część m )
W każdym razie uzyskasz pełne skanowanie tabeli i ocenisz predykat w każdym wierszu:
-
BETWEENmusi ocenić dwa predykaty:jeden dla dolnej granicy, a drugi dla górnej granicy. Złożoność toO(m) -
INmusi ocenić co najwyżejnpredykaty. Złożoność toO(m * n)... co znowu jest zawsze gorsze, a możeO(m)czy baza danych może zoptymalizowaćINlista ma być hashmapą, a nie listą predykatów.