I'm creating an MySQL call using PHP, I'm calculating distance using the haversine forumula:
SELECT name, id,
(6371 * acos(cos(radians(' . $lat . '))
* cos(radians(geoname.latitude))
* cos(radians(geoname.longitude) - radians(' . $lon . '))
+ sin(radians(' . $lat . '))
* sin(radians(geoname.latitude)))) AS distance
My question is; is it best to do all this calculation in SQL? This query searches a table with around 1000 records. Would it be more efficient to do some of the math in PHP rather than SQL? Is there a better way to optimise this query?
You're using the Spherical Law of Cosines formula, not the Haversine Formula (which is slightly slower).
Doing the math in MySQL will probably be much faster, I advise you to read this question I asked a while back, as for speed optimizations you should definitely read the excellent Geo Proximity Search with MySQL paper, pay special attention to pages 8-14 and 19.
For a super fast MySQL indexer, Check out Sphinx. It is extremely fast for finding what you need in your MySQL database, and does geo/distance calculations automatically.
Tutorial: Geo/Spatial Search Using Sphinx Search and PHP
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With