寻找两个拉长点之间距离的最快方法我目前在MySQL数据库中有将近100万个位置,所有位置都有经度和纬度信息。我试图通过查询找到一个点和许多其他点之间的距离。它没有我想要的那么快,尤其是每秒有100多个点击率。是否有一个更快的查询,或者可能是一个更快的系统,而不是MySQL呢?我使用这个查询:SELECT
name,
( 3959 * acos( cos( radians(42.290763) ) * cos( radians( locations.lat ) )
* cos( radians(locations.lng) - radians(-71.35368)) + sin(radians(42.290763))
* sin( radians(locations.lat)))) AS distance
FROM locations
WHERE active = 1 HAVING distance < 10 ORDER BY distance;注:所提供的距离为迈尔斯..如果你需要公里,使用6371而不是3959.
3 回答
翻阅古今
TA贡献1780条经验 获得超5个赞
使用 Point
值.的值 Geometry
中的数据类型 MyISAM
桌子。 截至MySQL 5.7.5, InnoDB
表现在也支持 SPATIAL
指数。 创建一个 SPATIAL
这些点的索引 使用 MBRContains()
若要查找值,请执行以下操作: SELECT *FROM tableWHERE MBRContains(LineFromText(CONCAT( '(' , @lon + 10 / ( 111.1 / cos(RADIANS(@lon))) , ' ' , @lat + 10 / 111.1 , ',' , @lon - 10 / ( 111.1 / cos(RADIANS(@lat))) , ' ' , @lat - 10 / 111.1 , ')' ) ,mypoint)
MySQL 5.1
SELECT * FROM table WHERE MBRContains ( LineString ( Point ( @lon + 10 / ( 111.1 / COS(RADIANS(@lat))), @lat + 10 / 111.1 ), Point ( @lon - 10 / ( 111.1 / COS(RADIANS(@lat))), @lat - 10 / 111.1 ) ), mypoint )
(@lat +/- 10 km, @lon +/- 10km)
.
应用额外的过滤来选择圆圈内的所有东西(而不是正方形) 可能对大圆距离(大距离)应用额外的精细过滤。
慕少森
TA贡献2019条经验 获得超9个赞
添加回答
举报
0/150
提交
取消