BETWEEN sollte IN übertreffen in diesem Fall (aber tun auch Ausführungspläne messen und prüfen!), insbesondere als n wächst und da Statistiken immer noch genau sind. Nehmen wir an:
mist die Größe Ihres Tischesnist die Größe Ihres Sortiments
Index kann verwendet werden (n ist winzig im Vergleich zu m )
-
Theoretisch
BETWEENkann mit einem einzigen "Bereichsscan" (Oracle-Sprache) auf dem Primärschlüsselindex implementiert werden und dann höchstensndurchlaufen Indexblattknoten. Die Komplexität istO(n + log m) -
INwird normalerweise als eine Reihe (Schleife) vonnimplementiert "Bereichsscans" auf dem Primärschlüsselindex. MitmDa es sich um die Größe der Tabelle handelt, ist die Komplexität immerO(n * log m)... was immer schlimmer ist (vernachlässigbar für sehr kleine Tabellenmoder sehr kleine Bereichen)
Index kann nicht verwendet werden (n ist ein wesentlicher Teil von m )
In jedem Fall erhalten Sie einen vollständigen Tabellenscan und werten das Prädikat für jede Zeile aus:
-
BETWEENmuss zwei Prädikate auswerten:Eines für die untere und eines für die obere Grenze. Die Komplexität istO(m) -
INmuss höchstensnauswerten Prädikate. Die Komplexität istO(m * n)... was wiederum immer schlimmer ist, oder vielleichtO(m)ob die Datenbank denINoptimieren kann Liste als Hashmap und nicht als Liste von Prädikaten.