BETWEEN měl by překonat IN v tomto případě (ale dělejte měřit a kontrolovat také prováděcí plány!), zejména jako n roste a statistiky jsou stále přesné. Předpokládejme:
mje velikost vašeho stolunje velikost vašeho rozsahu
Lze použít index (n je malý ve srovnání s m )
-
Teoreticky
BETWEENlze implementovat jediným „skenováním rozsahu“ (mluví Oracle) na indexu primárního klíče a poté procházet maximálněnuzly indexového listu. Složitost budeO(n + log m) -
INje obvykle implementován jako série (smyčka)n"prohledávání rozsahu" na indexu primárního klíče. Pomocímvzhledem k velikosti tabulky bude složitost vždyO(n * log m)... což je vždy horší (zanedbatelné pro velmi malé tabulkymnebo velmi malé rozsahyn)
Nelze použít index (n je významnou částí m )
V každém případě získáte úplný sken tabulky a vyhodnotíte predikát na každém řádku:
-
BETWEENpotřebuje vyhodnotit dva predikáty:jeden pro spodní a jeden pro horní hranici. Složitost jeO(m) -
INpotřebuje vyhodnotit maximálněnpredikáty. Složitost jeO(m * n)... což je opět vždy horší, nebo možnáO(m)pokud databáze dokáže optimalizovatINseznam bude hashmap, spíše než seznam predikátů.