MySQLにax、y、z 3Dポイントが保存されています。リージョン、スライス、またはポイントネイバーに質問したいと思います。Peano-Hilbert曲線を使用してポイントにインデックスを付け、クエリを高速化する方法はありますか?または、MySQLに3Dデータを保存するためのより効率的な方法はありますか?
アーマンに感謝します。
MySQLにax、y、z 3Dポイントが保存されています。リージョン、スライス、またはポイントネイバーに質問したいと思います。Peano-Hilbert曲線を使用してポイントにインデックスを付け、クエリを高速化する方法はありますか?または、MySQLに3Dデータを保存するためのより効率的な方法はありますか?
アーマンに感謝します。
個人的にはここまで行ったことはありませんが、Z カーブを使用して 2D ポイントを保存しました。これは非常にうまく機能し、より良い結果を得るためにヒルベルト曲線を実装しようとする必要性を感じませんでした。
これにより、確実に近くにないポイントをすばやく除外できます。絶対的な最悪のシナリオでは、エリア内のポイントを見つけるためにテーブルの 25% 以上をスキャンする必要があります。
これを行う方法は、xyz をバイナリに分割し、曲線を使用してそれらを単一の値につなぎ合わせることです。SQL スクリプトを用意しておけばよかったのですが、はるかに簡単に実行できる 2D Z カーブ用に 1 つしかありません。
編集:
申し訳ありませんが、これらすべてをすでに知っていて、本当に SQL サンプルを探しているだけかもしれませんが、いくつか追加があります。
おそらく、アルゴリズムを使用してgeohashを作成し、それを 3 つの座標に拡張できます。基本的に、可能な 3D ポイントのワールド キューブを定義し、さらにビットを追加するにつれて、キューブを絞り込みます。次に、左下隅が最小値になるように一貫して定義し、次のような範囲チェックを実行できます。
XXXXa < the_hash < XXXXz