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
ENTREmin
ymax
Si
expr
es mayor o igual quemin
yexpr
es menor o igual quemax
, BETWEEN devuelve 1; de lo contrario, devuelve 0. Esto es equivalente a la expresión (min
<=expr
ANDexpr
<=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:
-
i BETWEEN x AND y
-
x <= i AND i <= Y
-
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).