-1

このアルゴリズムを SQL でできるだけ効率的/迅速に実行する必要があります。

while( numberOfResults  < DesiredResults and NotCutOffCondition){
    retrieve and store up to (DesiredResults - numberOfResults) results 
        based on radius
    expand radius
}

半径のクエリは、制限よりも小さい/大きいだけの非常に基本的なものです。while ループはセットベースではないため、SQL では非効率的だと聞いたことがありますが、それなしでこれを行う方法は考えられません。より良い方法はありますか?これは、MySQL で実行されます。私が気付いていない点で違いがある場合は、おそらく SQL Server で実行されます。

次のテーブル構造を検討してください

id int
x_position decimal indexed
y_position decimal indexed

指定された x、y 位置に最も近い n ポイントを見つける必要があります。小さなエリア内に何千ものポイントが存在する可能性がありますが、常にそうとは限りません。したがって、私は小さな半径からスパイラルアウトする必要があります. または、少なくとも、通常のクエリで約 20 ポイントだけが必要な場合は、それが最も効率的であると考えました。

4

1 に答える 1

1

SQL Server の場合、単一のクエリで半径の拡張を使用して最近傍を見つける方法を次に示します。これは、k 個の隣人に資金を提供するように簡単に変更できます。

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

于 2013-08-05T04:50:55.220 に答える