【发布时间】:2010-06-22 14:14:09
【问题描述】:
我有一张这样结构的表格:
table name: shop
id_shop int(10)
name varchar(200)
latitude double
longitude double
我想计算给定坐标和保存在数据库中的坐标之间的距离。
我当前的查询:
SELECT *
FROM `shop` AS `s`
WHERE
(
( 6371
* ACOS(
SIN( RADIANS( latitude ) )
* SIN( RADIANS( 53.5353010379 ) )
+ COS( RADIANS( latitude ) )
* COS( RADIANS( 53.5353010379 ) )
* COS( RADIANS( 14.7984442616 ) - RADIANS( longitude ) )
)
)
<= 25
)
加上一些JOIN LEFT 的一些数据。
有没有办法优化那个查询? 加入连接大约需要 13 毫秒。
我还需要在此处添加一些 LIMIT 和 COUNT(*) 以获取用于分页的商店总数。
【问题讨论】:
-
您希望比 13 毫秒快多少?
-
实际上可能不快于 13 毫秒,但在我的系统中,对于不同的给定坐标 + 分页,会有许多类似的查询。我正在寻找一些最好的方法来处理这个问题。
-
给定的坐标来自另一个表格,还是来自谷歌地图的点击或移动设备坐标?
-
我用谷歌地图的地理定位脚本得到它们。
标签: sql mysql query-optimization