首先,讓我說明我知道MySQL對於GIS工作並不理想,並且最新版本具有GIS擴展,但我沒有能力使用無論是新的數據庫還是MySQL的新版本,所以我正在做。在MySQL中爲海峽搜索添加邊界的效率
- 我有一個大的MySQL數據庫,其中包括兩個浮動列lat和lng。
- 我需要檢索距離點的特定距離內的行,由兩個浮點數lat和lng定義。
- 我需要了解一下函數的相對(in)效率,以及通過預先計算lat和lng點中的邊界框的可能性。
這裏是我當前的查詢:
SELECT *,
(3958.762079 * acos(cos(radians(42.2626)) * cos(radians(`lat`)) * cos(radians(`lng`) - radians(-71.8023)) + sin(radians(42.2626)) * sin(radians(`lat`))))
AS distance
FROM `table` WHERE 1=1 AND
(`lat` >= '40.815284441002' AND `lat` <= '43.709915558998') AND
(`lng` >= '-73.758118021205' AND `lng` <= '-69.846481978795')
HAVING distance <= 100
ORDER BY distance
LIMIT 100
它的第一部分是haversine公式(http://en.wikipedia.org/wiki/Haversine_formula)的定義。
然後我有預先計算的範圍。 (使用https://github.com/anthonymartin/GeoLocation.php)
最大的問題是,這些邊界是否在運行haversine函數之前或之後進行測試?通過擴展,我是在每個查詢的每一行上運行這個函數,還是僅僅在這些範圍內運行這個函數?
這是一個足夠嚴重的計算值得有界嗎?