sql >> Databáze >  >> RDS >> Mysql

Nastavení tabulky zeměpisné šířky a délky v MySQL

Body byste měli ukládat do jednoho sloupce datového typu Point který můžete indexovat pomocí SPATIAL index (pokud je typ vaší tabulky 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

To výrazně zvýší rychlost dotazů typu „najít vše v daném okruhu“.

Všimněte si, že je lepší použít obyčejný TM metrické souřadnice (východní a severní) místo polárních (zeměpisná šířka a délka). Pro malé poloměry jsou dostatečně přesné a výpočty jsou značně zjednodušeny. Pokud jsou všechny vaše body v jedné polokouli a jsou daleko od pólů, můžete použít jeden centrální poledník.

Stále můžete samozřejmě použít polární souřadnice, ale vzorce pro výpočet MBR a vzdálenost bude složitější.



  1. The Eager Index Spool a The Optimizer

  2. Virtualmin:Po změně hesla nemáte přístup k této databázi MySQL

  3. výkon mysql count

  4. Pivoting tabulky v SQL (tj. křížová tabulka / křížová tabulka)