【发布时间】:2014-10-14 18:39:06
【问题描述】:
我有一个 MySQL 的 Florists 表,我正在尝试编写一个搜索函数,该函数将 Zipcode 作为输入,并查找所有发送到该邮政编码的 Florists。 我表中的每个花店记录都有 3 个项目
- 地理编码的经度(以花店地址为中心)
- 地理编码纬度(以花店地址为中心)
- 花店提供的城镇名称和邮政编码的字符串字段 例如- 波士顿(02215、02108、02109)、切尔西(02150)、萨默维尔(02143、02144、02145)
假设我想找到所有送货到“02108”的花店。在 MySQL 中实现此搜索的最佳方法是什么?
我在想
完全匹配搜索 - 但这需要每次搜索都扫描 整张桌子。效率低下?
-
Haversine 搜索 + 精确匹配 - 使用纬度/经度值将搜索范围缩小到 15 英里半径
MySQL Great Circle Distance (Haversine formula) 然后在这些结果中执行精确匹配。
还有别的吗?
非常感谢您的想法和意见。
【问题讨论】:
-
您能否在花店 id 和邮政编码上将子表添加为一对多?这将使您的搜索更有效率。
-
在某些时候,您将进行全表阅读以缩小结果范围。最经济的似乎是邮政编码/城镇字段上的
LIKE。SELECT * FROM table WHERE <field3> like '%<yourzip>%'例如。在进行LIKE之前,对所有这些进行Haversine 以缩小范围是很多处理。 -
感谢 gmiley 和 JNevill 的快速回复。我同意,儿童或连接表是去这里的方式。