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

Configurazione della tabella di latitudine e longitudine di MySQL

Dovresti memorizzare i punti in una singola colonna di tipo di dati Point che puoi indicizzare con un SPATIAL index (se il tipo di tabella è MyISAM ):

CREATE SPATIAL INDEX sx_place_location ON place (location)

SELECT  *
FROM    mytable
WHERE   MBRContains
               (
               LineString
                       (
                       Point($x - $radius, $y - $radius),
                       Point($x + $radius, $y + $radius)
                       )
               location
               )
        AND Distance(Point($x, $y), location) <= $radius

Ciò migliorerà drasticamente la velocità di query come "trova tutto entro un determinato raggio".

Nota che è meglio usare semplice TM coordinate metriche (est e nord) anziché polari (latitudine e longitudine). Per piccoli raggi, sono sufficientemente accurati e i calcoli sono notevolmente semplificati. Se tutti i tuoi punti sono in un emisfero e sono lontani dai poli, puoi utilizzare un unico meridiano centrale.

Puoi ancora usare le coordinate polari ovviamente, ma le formule per calcolare il MBR e la distanza sarà più complessa.