Oracle
 sql >> Datenbank >  >> RDS >> Oracle

Konvertieren zwischen Klauseln in Joins

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;