Mysql
 sql >> Base de données >  >> RDS >> Mysql

Requête SQL pour effectuer une recherche de rayon basée sur la latitude et la longitude

À mon avis, la clause WHERE va être lente à cause des mathématiques impliquées, et l'utilisation de fonctions dans la clause WHERE empêchera la base de données d'utiliser un index pour accélérer la requête - donc, en fait, vous examinerez chaque restaurant du base de données et effectuez les calculs du grand cercle sur chaque ligne, chaque fois que vous effectuez une requête.

Personnellement, je calculerais les coordonnées TopLeft et BottomRight d'un carré (qui n'a besoin d'être calculé que grossièrement à l'aide de pythagore) avec des côtés égaux à la plage que vous recherchez, puis effectuerais le test de clause WHERE plus compliqué sur le plus petit sous-ensemble de enregistrements qui se trouvent dans ce carré Lat/Long.

Avec un Index sur Lat &Long dans la base de données, la requête

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

devrait être très efficace

(Veuillez noter que je n'ai aucune connaissance spécifique de MySQL, seulement de MS SQL)