sql - 按邮政编码邻近度搜索 - MySql

标签 sql mysql zipcode proximity

我在通过邮政编码邻近查询进行搜索时遇到了一些问题。我已经搜索并搜索了谷歌,但我发现的所有内容要么太慢,要么无法工作。这是问题所在:

我有一个包含所有美国邮政编码(约 70,500 个)的表格的数据库,还有一个包含数千家商店(约 10,000 多个)的表格,其中包括他们的邮政编码。我需要能够提供邮政编码并返回距离该邮政编码最近的商店列表,并按距离排序。

任何人都可以为我指出他们已经使用过并且可以处理这么多负载的好资源,或者分享他们使用过的有效且速度相当快的查询吗?将不胜感激。谢谢!

最佳答案

您应该构建一个表,其中包含每个邮政编码以及关联的纬度和经度。当有人输入邮政编码和距离时,您会计算落入其中的经纬度范围,然后选择落入该边界框内的所有邮政编码。然后您选择在该集合中具有邮政编码的任何商店,并计算它们与提供的邮政编码的距离并按它排序。 (使用 haversine formula 计算地球上各点之间的距离)

如果速度是您的主要关注点,您可能需要预先计算所有距离。有一个包含商店邮政编码列、其他邮政编码和距离列的表。如果您需要减少行数,您可以将其他邮政编码限制为一定距离内的邮政编码(比如 100 英里,或者你有什么)。如果您不根据距离限制链接,您将拥有一个超过 7 亿行的表,但您当然可以进行快速查找。

关于sql - 按邮政编码邻近度搜索 - MySql,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2260282/

相关文章:

mysql - Mysql是否有set语句 "in"

mysql - 使用聚合 MIN 时,我无法让 mysql 返回最后一行

sql - 从 SQL Server 中的两个不同服务器选择数据

MYSQL游标循环,多跑一轮,为什么?

google-maps - 根据谷歌地图中的邮政编码绘制六边形?

mysql - 如何在 MySQL 中获取一系列重叠事件

mysql - 将查询结果分配给 MySQL 过程中的变量

mysql - 关于重复键更新 sqlite FMDB

javascript - 编写 JavaScript 邮政编码验证函数

elasticsearch - 确定哪些点在Kibana上的Elastic Map Service边界内