地域と緯度/経度の位置列を含む MySQL テーブルがあります。各エリアには、20.000
など、多くの場所があります。マップ上に均等に分布しているように見える 100
など、いくつかだけを選択する方法はありますか?
分散は完璧である必要はありません。クエリ速度の方が重要です。 MySQL を直接使用してこれが不可能な場合は、非常に高速なアルゴリズムを使用して、均等に分散された場所を選択できます。
###前もって感謝します。編集: コメント内のいくつかのリクエストに答えます。データには何も処理するものはなく、単にエリアと位置の座標だけです。例:
リーリー
特性を持つ列もいくつかありますが、これらはフィルタリングのみに使用されます。
nth行を同時に取得しようとしましたが、少し遅いとはいえ、うまくいったようです
リーリー
random() も使用できますが、少し遅くなります。
編集 3、コメント内の @RickJames の質問に答えて、1 か所にまとめます:
100
のみを表示します。 1000
以下の場合は、すべてを表示できます
P粉9820544492024-02-27 00:20:37
これは、目標を満たす 方法です。
「重複」については、2 つの項目が同じ位置にあることを検出する大まかな方法として考えてください:
SELECT ROUND(緯度 * 5), ROUND(経度 * 3)、 MIN(id) AS id_to_keep テーブルから 1,2ごとにグループ化
「5」と「3」は、保持する ID を増やす (または減らす) ために上 (または下) に調整できます。緯度/経度の配置により、「5」と「3」は異なります。この比率は、おそらくほとんどの温帯地域に当てはまります。 (赤道近くでは同じ量を使用し、高緯度ではより多くの量を使用します。)
小さな欠陥があります...2 つの非常に近いプロジェクトが、ROUNDs
によって作成された境界を越える可能性があります。
元のテーブルには何行ありますか?上記のクエリは何行生成しましたか? ( SELECT COUNT(*) FROM ( ... ) x;
)