0
我正在計劃一個網站(Drupal/MySQL),它必須根據距離某個位置的距離(我們以大約20,000個位置開始)搜索相當大的數據庫。到目前爲止,我發現在一個合理的方式尋找最佳的解決方案是使用用戶定義函數在SQL來計算座標之間的距離,如:在SQL中用距離搜索
SELECT *, CoordinateDistanceMiles(lat, lon, ${inputLat}, ${inputLon}) as distance
FROM items WHERE distance < {$radius}
(使用約翰·戴爾的distance function或類似)
但是,我也讀過UDF的效率很低。我的第二個想法(和設想)是嵌套這樣一來縮小其範圍,因此對項目的更小的子集上運行的UDF,例如內另一個查詢:
SELECT *, CoordinateDistanceMiles(lat, lon, ${inputLat}, ${inputLon}) as distance
FROM (
SELECT * FROM items WHERE
lat BETWEEN ${inputLat - const} AND ${inputLat + const} AND
lon BETWEEN ${inputLon - const} AND ${inputLon + const}
) WHERE distance < ${radius}
請問這種模式使搜索更快,還是更復雜?有沒有更好的解決方案?