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

SQL-forespørgsel til udførelse af radiussøgning baseret på breddegrad

Efter min mening vil WHERE-klausulen være langsom på grund af den involverede matematik, og brugen af ​​funktioner i WHERE-klausulen vil forhindre databasen i at bruge et indeks til at fremskynde forespørgslen - så i virkeligheden vil du undersøge hver restaurant i database, og udfør den store cirkel-matematik på hver række, hver gang du laver en forespørgsel.

Personligt ville jeg beregne TopLeft og BottomRight koordinaterne for en firkant (som kun skal beregnes groft ved hjælp af pythagoras) med sider svarende til det område, du leder efter, og derefter udføre den mere komplicerede WHERE-sætningstest på den mindre delmængde af poster, der er inden for den Lat/Long firkant.

Med et indeks på Lat &Long i databasen forespørgslen

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

bør være meget effektiv

(Bemærk venligst, at jeg ikke har noget kendskab til MySQL specifikt, kun til MS SQL)



  1. Mysql Kopier database fra server til server i en enkelt kommando

  2. Serverens tidszoneværdi 'AEST' er ikke genkendt eller repræsenterer mere end én tidszone

  3. sql for at vælge top 10 poster

  4. Automatisk sletning af glemte transaktioner i MS SQL Server