BETWEEN
moeten beter presteren dan IN
in dit geval (maar doe meet en controleer ook uitvoeringsplannen!), vooral als n
groeit en omdat de statistieken nog steeds kloppen. Laten we aannemen:
m
is de grootte van je tafeln
is de grootte van je assortiment
Index kan worden gebruikt (n
is klein vergeleken met m
)
-
In theorie,
BETWEEN
kan worden geïmplementeerd met een enkele "bereikscan" (Oracle speak) op de primaire sleutelindex, en vervolgens maximaaln
doorlopen index blad knooppunten. De complexiteit isO(n + log m)
-
IN
wordt meestal geïmplementeerd als een reeks (lus) vann
"bereikscans" op de primaire sleutelindex. Metm
aangezien de tabel zo groot is, is de complexiteit altijdO(n * log m)
... wat altijd erger is (verwaarloosbaar voor zeer kleine tabellenm
of zeer kleine bereikenn
)
Index kan niet worden gebruikt (n
is een aanzienlijk deel van m
)
In ieder geval krijgt u een volledige tabelscan en evalueert u het predikaat op elke rij:
-
BETWEEN
moet twee predikaten evalueren:een voor de ondergrens en een voor de bovengrens. De complexiteit isO(m)
-
IN
moet maximaaln
. evalueren predikaten. De complexiteit isO(m * n)
... wat weer altijd erger is, of misschienO(m)
als de database deIN
. kan optimaliseren lijst om een hashmap te zijn, in plaats van een lijst met predikaten.