搜索大数据表

时间:2013-07-19 19:14:16

标签: sql database algorithm search clustered-index

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

1 个答案:

答案 0 :(得分:1)

为什么不选择lat / long并创建一个首先在所有四个方向上延伸10英里的方框?

然后发出查询,在该框中查找lat / long的人。使用

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

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

您可以尝试添加and zip in (555555, 555556, etc)以查看是否运行得更快。所有其他邮政编码的预先计算列表,如果位于邮政编码内的任何地方10英里范围内,则很容易在另一个表格中设置。

@Randy做了一个评论,让我意识到这对北极和南极10英里范围内的地点不起作用。也许这无关紧要,因为那里的人口相当少。或者使用另一种方法,让每个人都在极地周围,10英里以南(或北方)或x,y位置。

此外,您必须找到一种从lat / long转换为里程的方法。你离赤道越远,纵向线越靠近。