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ší.