我有两个包含位置的MySQL表,@using Microsoft.AspNetCore.Identity
@using Core.Extensions
@{
ViewData["Title"] = "Overview";
}
<h4 class="mt-0 mb-5">Welcome back @User.Identity.FullName()</h4>
和table1
(见下文)。有&gt;每个表中有100K行。我想使用他们的地理位置找到这两个表中每个位置之间的距离。
这是MySQL查询,用于查找单个地理位置之间的距离,例如(-37.22,88.88)和table2
中的所有位置。
table1
鉴于这也是一个大数据,我不知道从哪里开始。想法?
答案 0 :(得分:1)
如果您想要优化旅行或靠近位置,您应该选择空间功能http://dev.mysql.com/doc/refman/5.7/en/spatial-extensions.html
但看起来你想要每一个计算,所以是的,你需要做10亿次操作。
SIN()
和COS()
,因此请为具有这些值的每一行创建aditional字段。所以你必须只做一次而不是每行100k次修改强>
阅读完最后评论后。你需要一个空间索引。与在数据库中搜索一个ID的方式相同,空间索引将优化您附近的搜索。
你也可以进行盒子搜索。不是搜索整个宇宙,而是在点周围创建一个框并在该框内搜索。使用普通浮动索引,你可以做这样的事情
SELECT t1.name, t2.name, mysql.Distancefunction(t1,t2) as distance
from t1
cross join t2
WHERE t2.x between (t1.x - 0.001) and (t1.x + 0.001) -- use x float index
and t2.y between (t1.y - 0.001) and (t1.y + 0.001) -- use y float index
and mysql.Distancefunction(t1,t2) < 100 km -- use spatial index
您可以使用delta 0.001。如果得到太多结果,则使用0.0001。如果您得到的结果很少,那么仅对没有100个邻居的那些位置执行0.01的第二步。