Mysql
 sql >> Database >  >> RDS >> Mysql

Query SQL per eseguire la ricerca del raggio in base alla latitudine e alla longitudine

A mio parere, la clausola WHERE sarà lenta a causa della matematica coinvolta e l'uso delle funzioni nella clausola WHERE impedirà al database di utilizzare un indice per accelerare la query - quindi, in effetti, esaminerai ogni ristorante nel database ed esegui i calcoli del grande cerchio su ogni riga, ogni volta che esegui una query.

Personalmente calcolerei le coordinate TopLeft e BottomRight di un quadrato (che deve essere calcolato solo crudamente usando Pitagora) con lati uguali all'intervallo che stai cercando, quindi eseguirei il più complicato test della clausola WHERE sul sottoinsieme più piccolo di record che si trovano all'interno di quel quadrato Lat/Long.

Con un indice su Lat &Long nel database la query

WHERE     MyLat >= @MinLat AND MyLat <= @MaxLat
      AND MyLong >= @MinLong AND MyLong <= @MaxLong

dovrebbe essere molto efficiente

(Si prega di notare che non ho alcuna conoscenza di MySQL in particolare, solo di MS SQL)