我有一张包含1000万条记录的表格。每条记录表明一个人。每条记录都有person_id,纬度,经度,邮政编码。我想选择一个查询并告诉半径10英里内有多少人(距离可以从纬度和经度计算)。搜索1000万条记录并计算距离,以检查1000万内是否不是一个好方法。所以,我只搜索邻近的邮政编码(我会以某种方式得到它)。如何搜索具有特定邮政编码的条目(不是所有1000万条记录)?
答案 0 :(得分:1)
为什么不选择lat / long并创建一个首先在所有四个方向上延伸10英里的方框?
然后发出查询,在该框中查找lat / long的人。使用
的WHEREx > xLess10 and x < xPlus10 and y > yLess10 and y < yPlus10
现在您有一个较小的列表,您可以使用类似于sqrt((x1 - x2)^2 + (y1 - y2)^2)
的较小列表计算实际距离。但它必须在球体上工作,而不是以英里标记的网格。
您可以尝试添加and zip in (555555, 555556, etc)
以查看是否运行得更快。所有其他邮政编码的预先计算列表,如果位于邮政编码内的任何地方10英里范围内,则很容易在另一个表格中设置。
此外,您必须找到一种从lat / long转换为里程的方法。你离赤道越远,纵向线越靠近。