sql >> Database >  >> RDS >> Mysql

SQL-query voor het uitvoeren van zoekopdrachten in een straal op basis van breedtegraad en lengtegraad

Naar mijn mening zal de WHERE-clausule traag zijn vanwege de wiskunde die ermee gemoeid is, en het gebruik van functies in de WHERE-clausule zal voorkomen dat de database een index gebruikt om de zoekopdracht te versnellen - dus in feite onderzoekt u elk restaurant in de database, en voer de grootcirkelberekeningen uit op elke rij, elke keer dat u een query maakt.

Persoonlijk zou ik de coördinaten TopLeft en BottomRight van een vierkant berekenen (dat alleen grof berekend hoeft te worden met behulp van pythagoras) met zijden die gelijk zijn aan het bereik waarnaar je op zoek bent, en dan de meer gecompliceerde WHERE-clausuletest uitvoeren op de kleinere subset van records die zich binnen dat Lat/Long-vak bevinden.

Met een Index op Lat &Long in de database de query

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

zou zeer efficiënt moeten zijn

(Houd er rekening mee dat ik geen kennis heb van MySQL specifiek, alleen van MS SQL)



  1. Kun je automatisch een mysqldump-bestand maken dat geen beperkingen oplegt aan externe sleutels?

  2. MySQL-query:match door komma's gescheiden waarde met kolom met door komma's gescheiden tekenreeks

  3. Null Pointer-uitzondering bij het aanroepen van getReadableDatabase()

  4. Geavanceerde SQL:uitvoer van de geparametriseerde functie met tabelwaarde in SQL-tabel invoegen