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:
mis de grootte van je tafelnis de grootte van je assortiment
Index kan worden gebruikt (n is klein vergeleken met m )
-
In theorie,
BETWEENkan worden geïmplementeerd met een enkele "bereikscan" (Oracle speak) op de primaire sleutelindex, en vervolgens maximaalndoorlopen index blad knooppunten. De complexiteit isO(n + log m) -
INwordt meestal geïmplementeerd als een reeks (lus) vann"bereikscans" op de primaire sleutelindex. Metmaangezien de tabel zo groot is, is de complexiteit altijdO(n * log m)... wat altijd erger is (verwaarloosbaar voor zeer kleine tabellenmof 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:
-
BETWEENmoet twee predikaten evalueren:een voor de ondergrens en een voor de bovengrens. De complexiteit isO(m) -
INmoet 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.