我有一個超過8百萬記錄(geonames)的表。這張桌子裏面有19列,其中有2列是經度和緯度。加快mysql距離查詢(緯度,經度)
我希望能夠找到從經緯度值最近的地方,我做這個查詢:
SELECT * , (6371 * ACOS(COS(RADIANS(40.8333333)) * COS(RADIANS(latitude)) * COS(RADIANS(longitude) - RADIANS(14.25)) + SIN(RADIANS(40.8333333)) * SIN(RADIANS(latitude)))) AS distance
FROM geoname
WHERE fclass = 'P'
HAVING distance <25
ORDER BY distance
LIMIT 0 , 20
我設置了B樹索引絲毫FCLASS,經度和緯度。
問題是查詢需要5.6027秒。太多了。 有沒有一種方法來優化它?我做錯了什麼?
感謝
查看[**如何通過經度和緯度計算距離來優化SQL查詢?](http://stackoverflow.com/questions/3093964/how-to-optimize-sql-query-with-calculating-distance-by-longitude-latitude) –
第一件事是用矩形距離來判別最大值例如:WHERE latitude Y,並計算一次經度 W'。這將消除90-95%的可能性,使用真實距離進行細化將花費更少的時間。 –
謝謝亞歷山大。這個解決方案加速到0.04秒查詢! :) – Luca