fechas sql mysql between

between sql fechas



¿Hay una diferencia de rendimiento entre BETWEEN e IN con MySQL o en SQL en general? (3)

He hecho una investigación para esta pregunta. Tengo 11M filas en mi tabla. He ejecutado dos consultas sobre eso:

Consulta 1: SELECT * FROM PLAYERS WHERE SCORE BETWEEN 10 TO 20

Consulta 2: SELECT * FROM PLAYERS WHERE SCORE IN (10,11,...,20)

Mientras que el tiempo de ejecución, ambas consultas se traducen como Andomar dijo anteriormente.

Entre ambas consultas, la consulta 1 se ejecuta más rápido que la consulta 2.

Para saber más siga este enlace:

Rendimiento de BETWEEN VS IN () en MySQL

Gracias.

Tengo un conjunto de filas consecutivas que deseo obtener en función de su clave principal, que es un entero de incremento automático. Suponiendo que no hay agujeros, ¿hay algún rendimiento entre:

SELECT * FROM `theTable` WHERE `id` IN (n, ... nk);

y:

SELECT * FROM `theTable` WHERE `id` BETWEEN n AND nk;


BETWEEN debería superar a IN en este caso (¡pero también debe medir y verificar los planes de ejecución!), Especialmente a medida que n crece y las estadísticas siguen siendo precisas. Asumamos:

  • m es el tamaño de tu mesa
  • n es el tamaño de tu rango

Se puede usar el índice ( n es pequeño en comparación con m )

  • En teoría, BETWEEN puede implementarse con un solo "escaneo de rango" (habla Oracle) en el índice de clave principal, y luego atravesar a lo sumo n nodos de hoja de índice. La complejidad será O(n + log m)

  • IN se implementa generalmente como una serie (bucle) de n "exploraciones de rango" en el índice de clave principal. Dado que m es el tamaño de la tabla, la complejidad siempre será O(n * log m) ... lo que siempre es peor (negligente para tablas muy pequeñas mo rangos muy pequeños n )

No se puede usar el índice ( n es una porción significativa de m )

En cualquier caso, obtendrá una tabla completa y evaluará el predicado en cada fila:

  • BETWEEN necesita evaluar dos predicados: uno para el límite inferior y otro para el límite superior. La complejidad es O(m)

  • IN necesita evaluar como máximo n predicados. La complejidad es O(m * n) ... que es siempre peor, o quizás O(m) si la base de datos puede optimizar la lista IN para que sea un mapa de hash, en lugar de una lista de predicados.


a between b and c es una macro que se expande a b <= a and a <= c .

a in (b,c,d) es una macro que se expande a a=b or a=c or a=d .

Asumiendo que n y nk son enteros, ambos deberían terminar teniendo el mismo significado. La variante between debería ser mucho más rápida porque solo son dos comparaciones, en comparación con nk - n para la variante in .