Mysql
 sql >> Datenbank >  >> RDS >> Mysql

SQL-Abfrage zum Durchführen einer Umkreissuche basierend auf Breitengrad und Längengrad

Meiner Meinung nach wird die WHERE-Klausel aufgrund der beteiligten Mathematik langsam sein, und die Verwendung von Funktionen in der WHERE-Klausel wird verhindern, dass die Datenbank einen Index verwendet, um die Abfrage zu beschleunigen - also werden Sie praktisch jedes Restaurant in der untersuchen Datenbank und führen Sie bei jeder Abfrage die Großkreisberechnung für jede Zeile durch.

Persönlich würde ich die TopLeft- und BottomRight-Koordinaten eines Quadrats (das nur grob mit Pythagoras berechnet werden muss) mit Seiten berechnen, die dem gesuchten Bereich entsprechen, und dann den komplizierteren WHERE-Klauseltest für die kleinere Teilmenge von durchführen Datensätze, die sich innerhalb dieses Breiten-/Längengradquadrats befinden.

Mit einem Index auf Lat &Long in der Datenbank wird die Abfrage

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

sollte sehr effizient sein

(Bitte beachten Sie, dass ich keine speziellen Kenntnisse von MySQL habe, nur von MS SQL)