このアルゴリズムを 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 ポイントだけが必要な場合は、それが最も効率的であると考えました。