优化扩展SQL查询

时间:2013-08-05 03:08:58

标签: mysql sql sql-server

我需要在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分,这将是最有效的。

1 个答案:

答案 0 :(得分:1)

对于SQL Server,这是一种在单个查询中使用扩展半径查找最近邻居的方法。这可以很容易地修改,以资助k邻居。

http://blogs.msdn.com/b/isaac/archive/2008/10/23/nearest-neighbors.aspx