gpt4 book ai didi

sql - 搜索大数据表

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:08:28 25 4
gpt4 key购买 nike

我有一个包含 1000 万条记录的表。每条记录代表一个人。每条记录都有 person_id、纬度、经度、邮政编码。我想选择一个查询并告诉有多少人在 10 英里半径内(距离可以从纬度和经度计算)。搜索1000万条记录并计算距离来检查是否在1000万以内不是一个好方法。所以,我只会在邻近的邮政编码中搜索(我会以某种方式得到它)。如何搜索具有特定邮政编码的条目(不是所有 1000 万条记录)?

最佳答案

为什么不首先使用纬度/经度创建一个在所有四个方向上都延伸 10 英里的框?

然后发出一个查询,寻找在该框中具有经/纬度的人。使用 WHERE 做

x > xLess10 and x < xPlus10 and y > yLess10 and y < yPlus10

现在您有一个较小的列表,您可以使用类似于 sqrt((x1 - x2)^2 + (y1 - y2)^2) 的方法计算较小列表的实际距离。但它必须在球体上工作,而不是在以英里为单位的网格上工作。

您可以尝试添加一个 并压缩(555555、555556 等) 以查看运行速度是否更快。一个邮政编码范围内任何地方 10 英里以内的所有其他邮政编码的预计算列表很容易在另一个表中设置。

@Randy 发表的评论让我意识到这对于南北两极 10 英里以内的位置不太适用。也许这并不重要,因为那里的人口很少。或者使用另一种方法,让每个人都在围绕极点和南(或北)10 英里或 x、y 位置的圆圈内。

此外,您还必须找到一种将纬度/经度转换为英里的方法。离赤道越远,纵向线靠得越近。

关于sql - 搜索大数据表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17753798/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com