Hvad du har hørt om rækkeviddescanninger og between
i MySQL er simpelthen ikke sandt. Her er et citat fra dokumentationen
:
Så brugen af et indeks er ikke overraskende. Det bedste indeks for disse data ville være et sammensat indeks på start, end
.
Problemet du har er, at du har to kolonner start
og end
. Dette gør forespørgslen lidt mere kompliceret.
Følgende kunne tænkes at fungere bedre under nogle omstændigheder med et indeks på start
og et separat indeks på end
og en primær nøgle på rækkerne:
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;