not inclusive fechas dates mysql between

mysql - inclusive - not between sql



¿Cuál es el rendimiento de "ENTREVISTADOR" de mysql en...? (4)

¿Hay algún mejor rendimiento al consultar (en particular) mysql de lo siguiente:

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

encima:

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

o ¿La sintaxis BETWEEN está siendo sustituida por el segundo sql?


De la documentación :

  • expr ENTRE min y max

Si expr es mayor o igual que min y expr es menor o igual que max , BETWEEN devuelve 1; de lo contrario, devuelve 0. Esto es equivalente a la expresión ( min <= expr AND expr <= max ) si todos los argumentos son del mismo tipo. De lo contrario, la conversión de tipo se realiza 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.

Entonces realmente es solo azúcar sintáctica.


Las tres declaraciones siguientes producirán 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 podría (dependiendo de sus índices) usar diferentes índices: el orden importa y usted debería estar probando con la consulta EXPLAIN para ver la diferencia


Según recuerdo, no hay diferencia. Pero mira por ti 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

producir los mismos planes


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