我需要在SQL中尽可能高效/快速地执行此算法。
while( numberOfResults < DesiredResults and NotCutOffCondition){
retrieve and store up to (DesiredResults - numberOfResults) results
based on radius
expand radius
}
对半径的查询非常基本,只是小于/大于限制。我听说虽然循环在SQL中是低效的,因为它没有基于设置,但我想不出一种方法可以在没有它的情况下做到这一点。有没有更好的办法?这将在MySQL上运行,也许是SQL Server,如果在这方面有任何我不知道的差异。
考虑以下表格结构
id int
x_position decimal indexed
y_position decimal indexed
我需要找到给定x,y位置的最近n个点。在一个小区域内可能存在数千个可能的点,但并非总是如此。因此我需要从一个小半径螺旋出来。或者至少我认为如果我只想在通常的查询中获得大约20分,这将是最有效的。
答案 0 :(得分:1)
对于SQL Server,这是一种在单个查询中使用扩展半径查找最近邻居的方法。这可以很容易地修改,以资助k邻居。
http://blogs.msdn.com/b/isaac/archive/2008/10/23/nearest-neighbors.aspx