Wat je hebt gehoord over bereikscans en between
in MySQL is gewoon niet waar. Hier is een citaat uit de documentatie
:
Het gebruik van een index is dus niet verwonderlijk. De beste index voor deze gegevens is een samengestelde index op start, end
.
Het probleem dat je hebt is dat je twee kolommen hebt start
en end
. Dit maakt de zoekopdracht een beetje ingewikkelder.
Het volgende zou onder bepaalde omstandigheden mogelijk beter kunnen presteren, met een index op start
en een aparte index op end
en een primaire sleutel op de rijen:
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;