sql >> Databasteknik >  >> RDS >> Mysql

SQL-fråga för att utföra radiesökning baserat på latitud longitud

Enligt min åsikt kommer WHERE-satsen att vara långsam på grund av den inblandade matematiken, och användningen av funktioner i WHERE-satsen kommer att förhindra att databasen använder ett index för att snabba upp frågan - så i praktiken kommer du att undersöka varje restaurang i databas och utför matematiska cirklar på varje rad, varje gång du gör en fråga.

Personligen skulle jag beräkna TopLeft- och BottomRight-koordinaterna för en kvadrat (som bara behöver beräknas grovt med pythagoras) med sidor lika med intervallet du letar efter, och sedan utföra det mer komplicerade WHERE-satstestet på den mindre delmängden av poster som ligger inom den lat-/långa kvadraten.

Med ett index på Lat &Long i databasen kommer frågan

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

bör vara mycket effektiv

(Observera att jag inte har någon kunskap om MySQL specifikt, bara om MS SQL)



  1. Hur man returnerar tabell från MySQL-funktionen

  2. Långsamhet hittas när bas 64-bild väljer och kodar från databasen

  3. hur man delar strängen i olika kolumner?

  4. Automatisk failover av Moodle PostgreSQL-databasen