Lo que ha oído sobre los escaneos de rango y between
en MySQL simplemente no es cierto. Aquí hay una cita de la documentación
:
Por lo tanto, el uso de un índice no es sorprendente. El mejor índice para estos datos sería un índice compuesto en start, end
.
El problema que tienes es que tienes dos columnas start
y end
. Esto hace que la consulta sea un poco más complicada.
Lo siguiente posiblemente podría funcionar mejor en algunas circunstancias, con un índice en start
y un índice separado en end
y una clave principal en las filas:
select gt.*
from (SELECT * FROM autumn4.ip WHERE :number >= start) gt join
(SELECT * FROM autumn4.ip WHERE :number <= end) lt
on gt.PRIMARYKEY = lt.PRIMARYKEY;