Oracle
 sql >> Database >  >> RDS >> Oracle

Conversione tra clausola in join

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;