Was Sie über Reichweitenscans und between
gehört haben in MySQL ist einfach nicht wahr. Hier ist ein Zitat aus der Dokumentation
:
Die Verwendung eines Index ist also nicht überraschend. Der beste Index für diese Daten wäre ein zusammengesetzter Index für start, end
.
Das Problem, das Sie haben, ist, dass Sie zwei Spalten start
haben und end
. Dadurch wird die Abfrage etwas komplizierter.
Das Folgende könnte unter bestimmten Umständen möglicherweise besser abschneiden, mit einem Index auf start
und einen separaten Index am end
und einen Primärschlüssel in den Zeilen:
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;