Quello che hai sentito sulle scansioni dell'intervallo e su between
in MySQL semplicemente non è vero. Ecco una citazione dalla documentazione
:
Quindi, l'uso di un indice non è sorprendente. L'indice migliore per questi dati sarebbe un indice composito su start, end
.
Il problema che hai è che hai due colonne start
e end
. Questo rende la query un po' più complicata.
Quanto segue potrebbe plausibilmente funzionare meglio in alcune circostanze, con un indice su start
e un indice separato su end
e una chiave primaria sulle righe:
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;