すべてのプロダクト
Search
ドキュメントセンター

PolarDB:マルチ境界ボックス空間インデックス

最終更新日:Mar 06, 2025

デフォルトの空間インデックスに加えて、GanosBaseは、複数の境界ボックス空間インデックスをサポートして、幾何学的な線オブジェクトのクエリを高速化します。

構文

CREATE INDEX index_name ON table_name USING GIST(geom_column_name operator_class);

Parameters

パラメーター

説明

geom_column_name

マルチ境界ボックスの空間インデックスの作成に使用される列の名前。

operator_class

マルチ境界ボックスの空間インデックスを作成するために明示的に指定される演算子クラス。 有効な値:

  • gist_geometry_ops: ジオメトリタイプのオブジェクトの2D空間インデックスを作成します。 これは、ジオメトリタイプのデフォルト値です。

  • gist_geometry_ops_2dx: ジオメトリタイプのオブジェクトの2Dマルチバウンディングボックス空間インデックスを作成します。

  • gist_geography_ops: geographyタイプのオブジェクトの3D空間インデックスを作成します。 これは、geographyタイプのデフォルト値です。

  • gist_geography_ops_2dx: geographyタイプのオブジェクトの2Dマルチバウンディングボックス空間インデックスを作成します。

説明

  • 多数の点と大きな空間範囲を持つLineStringオブジェクトとMultiLineStringオブジェクトのインデックスを作成すると、ターゲットオブジェクトが分割されてマルチ境界ボックスの空間インデックスが作成されます。

  • 分割モードは、ganos.geometry.mbbox_split_modeパラメーターで指定します。 有効な値には、オブジェクトの長さによる分割を示すlengthと、ポイント数による分割を示すpointsが含まれます。 デフォルト値はlengthです。 次のルールが適用されます。

    • オブジェクトを長さで分割する場合、分割後の各セグメントの長さはganos.geometry.mbbox_split_lengthパラメーターで指定されます。 セグメントの最大数は、ganos.geometry.mbbox_split_max_segmentsパラメーターで指定します。 各セグメントの最小長値に基づく分割後のセグメント数が、このパラメータで定義されるセグメントの最大数を超える場合、各セグメントの長さは、次の式を使用して計算されます。セグメント長=全長 /セグメントの最大数。

    • オブジェクトをポイント数で分割する場合、分割後の各セグメントのポイント数はganos.geometry.mbbox_split_pointsパラメーターで指定します。 セグメントの最大数は、ganos.geometry.mbbox_split_max_segmentsパラメーターで指定します。 各セグメントの指定されたポイント数に基づいて分割した後のセグメント数が、このパラメーターで定義された最大セグメント数を超える場合、各セグメントのポイント数は、次の式を使用して計算されます。ポイント数=合計ポイント数 /最大セグメント数。

  • SQL文に追加の変更は必要ありません。

  • ジオメトリ型のオブジェクト

    CREATE TABLE line_test(id int, geom geometry);
    INSERT INTO line_test VALUES(1, st_geomfromtext('Linestring(0 1, 0 0, 1 0, 2 1,2 2,3 3)'));
    
    -- Create a 2D spatial index.
    CREATE INDEX line_test_gist_geom_2d ON line_test USING GIST(geom);
    
    --- Create a 2D multi-bounding box spatial index.
    CREATE INDEX line_test_gist_geom_2dx ON line_test USING GIST(geom gist_geometry_ops_2dx);
  • 地理タイプのオブジェクト

    CREATE TABLE line_test(id int, geog geography);
    INSERT INTO line_test VALUES(1, st_geogfromtext('Linestring(0 1, 0 0, 1 0, 2 1,2 2,3 3)'));
    
    --- Create a 3D spatial index.
    CREATE INDEX line_test_gist_geog_3d ON line_test USING GIST(geog);
    
    --- Create a 2D multi-bounding box spatial index.
    CREATE INDEX line_test_gist_geog_2dx ON line_test USING GIST(geog gist_geography_ops_2dx);