Dado que ya tiene un índice en ip_start
, así es como se usa mejor, asumiendo que quieres hacer un acceso por IP (1234
en este ejemplo):
select organization from (
select ip_end, organization
from iptable
where ip_start <= 1234
order by ip_start desc
limit 1
) subqry where 1234 <= ip_end
Esto usará su índice para iniciar un escaneo que se detiene inmediatamente debido al limit 1
. El costo solo debería ser marginalmente más alto que el de un simple acceso indexado. Por supuesto, esta técnica se basa en el hecho de que los rangos definidos por ip_start
y ip_end
nunca se superponga.
El problema con su enfoque original es que mysql, al desconocer esta restricción, solo puede usar el índice para determinar dónde comenzar o detener el análisis que (cree) necesita para encontrar todas las coincidencias para su consulta.