4 Stimmen

Optimierung der SQL-Abstandsabfrage

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

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X