首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >MYSQL --以最快的方式获得同弦附近的点数

MYSQL --以最快的方式获得同弦附近的点数
EN

Stack Overflow用户
提问于 2017-01-01 20:45:55
回答 1查看 75关注 0票数 0

我试着按地点在“我”周围找点,这很简单:

代码语言:javascript
运行
复制
select * from X where ((SQRT(POW(69.1 * (a.lat - 49.201441 ), 2) + 
POW(69.1 * (16.161299 - a.lng) * COS(a.lat / 57.3), 2))) <='1') LIMIT 5

*

代码语言:javascript
运行
复制
my location = 49.201441;16.161299
distance = 1 (mile)

此查询返回距离1英里的" me“周围的5个点。这太快了但就在我的桌子上有一个..。我不知道,大概5000行。

我在20万行表上使用这个查询,它非常慢!也许..。2-7秒,即使极限为1=无差别.

有人能给我解释一下并帮我吗?多谢各位!

顺便说一句:如果我的查询没有包含查询的这一部分,那么可能需要0.0008 s.因此,查询的第二部分是正确的。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-01-01 20:57:04

我用这个来找你身边的人。

表名: user_location

id,用户名,纬度,经度,经度

我不确定距离是否是一英里,但这样做是让用户从数据库中减去每一个人。如果用户lat和long在1以内,它将被放入结果中。

最大的问题是,1不等于1英里。它接近10英里,我相信(这是很久以前,可能不是10英里,我不记得了),但你可以随时改变这一点。另一个问题是,你基本上总是要更新人们的位置。这并没有那么糟糕,但是如果你有一个慢服务器和很多用户,它可以减慢你的速度。

它速度快而且有效..。不是最好的解决办法,但可能对你有用。对我来说,它至少显示了一个很好的周边地区。

代码语言:javascript
运行
复制
$query = "SELECT * FROM `user_location` WHERE (".$user_lat." - latitude) <= 1 AND (".$user_lon." - longitude) <= 1 LIMIT 100";

我用10,000条线测试了这个,在我身边的254个人中,测试的时间还不到3秒。(随机生成的内容)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41418877

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档