BETWEEN debería superar a IN en este caso (pero hacer ¡medir y verificar los planes de ejecución también!), especialmente como n crece y como las estadísticas siguen siendo precisas. Supongamos:
mes el tamaño de tu mesanes el tamaño de su rango
Se puede usar el índice (n es pequeño en comparación con m )
-
En teoría,
BETWEENse puede implementar con un solo "escaneo de rango" (habla de Oracle) en el índice de clave principal, y luego atravesar como máximonnodos de hoja de índice. La complejidad seráO(n + log m) -
INgeneralmente se implementa como una serie (bucle) den"escaneos de rango" en el índice de clave principal. Conmsiendo el tamaño de la tabla, la complejidad siempre seráO(n * log m)... que siempre es peor (insignificante para tablas muy pequeñasmo rangos muy pequeñosn)
No se puede usar el índice (n es una porción significativa de m )
En cualquier caso, obtendrá un escaneo completo de la tabla y evaluará el predicado en cada fila:
-
BETWEENnecesita evaluar dos predicados:uno para el límite inferior y otro para el límite superior. La complejidad esO(m) -
INnecesita evaluar como máximonpredicados. La complejidad esO(m * n)... que de nuevo siempre es peor, o quizásO(m)si la base de datos puede optimizar elINlista para ser un hashmap, en lugar de una lista de predicados.