Hello,
Wenn Du mal das komplette Statement und die Tabellendefinitionen dazu hättest?
Vermutlich berechnest Du auch noch jede Entfernung zweimal?
Wieso?
Ich hole mir genau einen Ort mit Koordinaten:
SELECT
name
,geo_laenge
,geo_breite
FROM orte
WHERE id = 561
...
berechne longitude und latitude einmal:
$rad_lon1 = deg2rad( $row_zentrum['geo_laenge'] );
$rad_lat1 = deg2rad( $row_zentrum['geo_breite'] );
uns setze die in die Formel für die anderen Orte ein:
SELECT
...
,ROUND( 6366.19773095 * ACOS( SIN(0.869112880969) *SIN(RADIANS(ort1.geo_breite)) +COS(0.869112880969) *COS(RADIANS(ort1.geo_breite)) *COS(RADIANS(ort1.geo_laenge) -0.173359191277 ))) distanz
...
GROUP BY ...
ORDER BY dist_km
Tabelle orte:
`id` int(11) NOT NULL auto_increment,
`owner_id` int(11) NOT NULL default '0',
`land_kz` varchar(3) collate utf8_unicode_ci default NULL,
`name` varchar(50) collate utf8_unicode_ci NOT NULL,
`geo_laenge` float default NULL,
`geo_breite` float default NULL,
`plz` varchar(10) collate utf8_unicode_ci NOT NULL,
...
`last_modified` timestamp NOT NULL default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP,
PRIMARY KEY (`id`),
UNIQUE KEY `land_plz_name` (`land_kz`,`plz`,`name`),
KEY `plz` (`plz`)
)
Würde ein Key auf Länge und Breite die Berechnung beschleunigen?
MfG Gast