BETWEEN bör överträffa IN i det här fallet (men gör mäta och kontrollera utförandeplaner också!), särskilt som n växer och eftersom statistiken fortfarande är korrekt. Låt oss anta:
mär storleken på ditt bordnär storleken på ditt intervall
Index kan användas (n är liten jämfört med m )
-
I teorin,
BETWEENkan implementeras med en enda "räckviddsskanning" (Oracle speak) på primärnyckelindexet och sedan gå igenom högstnindexbladsnoder. Komplexiteten kommer att varaO(n + log m) -
INimplementeras vanligtvis som en serie (loop) avn"räckviddssökningar" på primärnyckelindexet. Medmeftersom tabellens storlek är komplexiteten alltidO(n * log m)... vilket alltid är värre (försumbart för mycket små tabellermeller mycket små intervalln)
Index kan inte användas (n är en betydande del av m )
I vilket fall som helst får du en fullständig tabellskanning och utvärderar predikatet på varje rad:
-
BETWEENmåste utvärdera två predikat:ett för den nedre och ett för den övre gränsen. Komplexiteten ärO(m) -
INbehöver utvärdera som mestnpredikat. Komplexiteten ärO(m * n)... vilket återigen alltid är värre, eller kanskeO(m)om databasen kan optimeraINlista för att vara en hashmap, snarare än en lista med predikat.