Ich führe eine MySQL-Abfrage aus, die Ergebnisse basierend auf dem Standort zurückgibt. Allerdings habe ich vor kurzem festgestellt, dass seine wirklich verlangsamen meine PHP-Anwendung. Ich habe CodeIgniter verwendet und der Profiler zeigt, dass die Abfrage 4,2 Sekunden dauert. Die Tabelle geoname hat 500.000 Zeilen. Ich habe einige Indizes auf die Schlüsselspalten, wie sonst kann diese Abfrage zu beschleunigen?
Hier ist mein SQL:
SELECT `products`.`product_name`
, `geoname`.`geonameid`
, `geoname`.`latitude`
, `geoname`.`longitude`
, `products`.`product_id`
, AVG(ratings.vote) as rating
, count(comments.comment_id) as total_comments
, (6371 * acos(cos(radians(38.7666667))
* cos(radians(geoname.latitude))
* cos(radians(geoname.longitude) - radians(-3.3833333))
+ sin(radians(38.7666667))
* sin(radians(geoname.latitude)))
) AS distance
FROM (`foods`)
JOIN `geoname` ON `geoname`.`geonameid` = `products`.`geoname_id`
LEFT JOIN `ratings`
ON `ratings`.`var_id` = `products`.`product_id`
LEFT JOIN `comments`
ON `comments`.`var_id` = `products `.`product_id`
WHERE `products`.`product_id` != 82
GROUP BY `products`.`product_id`
HAVING `distance` < 99
ORDER BY `distance`
LIMIT 10