2010-12-07 10 views
32

¿Hay alguna mejor rendimiento cuando se consulta en mysql (particularmente) de los siguientes:¿Cuál es el rendimiento de "ENTREVISTADOR" de mysql en ...?

SELECT * FROM `table` WHERE `unix_date` BETWEEN 1291736700 AND 1291737300 

sobre: ​​

SELECT * FROM `table` WHERE `unix_date` >= 1291736700 AND `unix_date` <= 1291737300 

o entre la sintaxis simplemente está siendo sustituido con el segundo sql?

Respuesta

31

Por lo que recuerdo, no hay diferencia. Pero ver por sí mismo si:

explain plan for 
SELECT * FROM `table` WHERE `unix_date` BETWEEN 1291736700 AND 1291737300 

y:

explain plan for 
SELECT * FROM `table` WHERE `unix_date` >= 1291736700 AND `unix_date` <= 1291737300 

producen los mismos planes.

9

BETWEEN muestra una intención más clara y lee mejor (algo que SQL se propuso hacer).

20

De the documentation:

  • expr ENTRE min Y max

Si expr es mayor que o igual a min y expr es menor que o igual a max, entre los retornos 1, de lo contrario devuelve 0. Esto es equivalente a la expresión (min < = expr Y expr < = max) si todos los argumentos son del mismo tipo. De lo contrario, la conversión de tipo se lleva a cabo de acuerdo con las reglas descritas en la Sección 11.2, "Conversión de tipo en la evaluación de expresiones", pero se aplica a los tres argumentos.

Así que realmente es solo sintaxis el azúcar.

1

Los tres siguiente declaración producirá el mismo resultado:

  1. i BETWEEN x AND y
  2. x <= i AND i <= Y
  3. i >= x AND i <= Y

Pero en la configuración 3 MySQL puede (dependiendo de sus índices) utilizan diferentes índices : el orden importa y usted debe probar con la consulta EXPLAIN para ver la diferencia

Cuestiones relacionadas