Optimising SQL distance query

Posted by Alex on Stack Overflow See other posts from Stack Overflow or by Alex
Published on 2010-03-14T09:52:17Z Indexed on 2010/03/14 9:55 UTC
Read the original article Hit count: 366

Filed under:
|

I'm running an MySQL query that returns results based on location. However I have noticed recently that its really slowing down my PHP app. I used CodeIgniter and the profiler shows the query taking 4.2seconds. The geoname table has 500,000 rows. I have some indexes on the key columns, how else can speed up this query?

Here is my 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

© Stack Overflow or respective owner

Related posts about sql

Related posts about mysql