我有一个高级 MySQL 搜索,它正在运行基于 lat 和 lon 的半径搜索。上次我建立这样一个系统时,查询速度有很多问题。我一直在阅读,我注意到有些人会在选择中选择它。
SELECT *, (6271 * acos(cos(radians('".$lat."')) * cos(radians(lat)) * cos( radians(long) - radians('".$lng."')) + sin(radians('".$lat."')) *
sin(radians(lat))))
AS distance
FROM carpark HAVING distance < 15 ORDER BY distance LIMIT 0 , 10";
或者也可以在 where 子句中运行它。
Where ( 6371 * ACOS( COS( RADIANS(".$lat.") ) * COS( RADIANS( grt32sg32u_PostCodeData.lat ) )
* COS( RADIANS(PostCodeData.lon) - RADIANS(".$lon.")) + SIN(RADIANS(".$lat."))
* SIN( RADIANS(PostCodeData.lat)))) <= 15";
那么哪个更快呢?它们的速度是一样的还是有区别的?还有其他方法可以优化此查询吗?