空間インデックスと ST_Geometry

ST_Geometry で使用される空間インデックスの実装方法は、どの DBMS を使用するかによって異なります。IBM Informix Spatial DataBlade モジュールと PostgreSQL の ST_Geometry 実装では、R-tree インデックスを使用して空間データにインデックスを付けます。Oracle と DB2 の ST_Geometry では空間グリッド インデックスが使用されます。

空間インデックスは何種類かの方法で作成することができます。

ST_Geometry 列を含むテーブルに対して空間リレーションシップ クエリを発行する場合は、特定の空間リレーションシップ関数を実行する際に、クエリ処理を高速化するために空間インデックスが利用されます。
これらの関数は「空間インデックスを使用する場合」に記載されています。

Oracle

ST_Geometry 格納で作成されるフィーチャクラスは、Oracle データベース内に追加テーブルを追加します。この空間インデックス テーブルには、S<n>_IDX$ という名前が付けられます。<n> は、空間インデックス テーブルのジオメトリ インデックスの値です。この値は、SDE.ST_GEOMETRY_COLUMNS テーブルにクエリを実行することによって取得されます。空間インデックス テーブルは、Oracle の索引構成表(IOT)として作成されます。ST_Geometry 属性の空間インデックスは、Enterprise Manager で表示した場合、A<n>_IX1 として表示されます。値 <n> は、LAYERS テーブルに格納された LAYER_ID 値を表します。

S<n>_IDX$ テーブルには S<n>$_IX1 と S<n>$_IX2 という 2 つの追加のインデックスが作成されます。フィーチャクラスを作成するときに指定する DBTUNE コンフィグレーション キーワードの S_STORAGE パラメータを変更することで、DBMS へのこれらのインデックスの格納方法を指定できます。

ST_Geometry 列を含むパーティション化ビジネス テーブルを作成する場合は、空間インデックスもパーティション化してください。パーティション化には、グローバルとローカルの 2 種類があります。デフォルトでパーティション化ビジネス テーブルに作成されるのは、グローバル パーティション インデックスです。ローカル パーティション インデックスを作成する場合は、CREATE INDEX ステートメントの末尾にキーワード LOCAL を追加します。ArcGIS で、空間インデックスの CREATE INDEX ステートメントの末尾に LOCAL を追加できるようにするには、DEFAULTS キーワードでパラメータ ST_INDEX_PARTITION_LOCAL を TRUE に設定します。

PostgreSQL

PostgreSQL の場合、R ツリー インデックスは、GiST(Generalized Search Tree )インデックス インフラストラクチャで実装されます。GiST インデックスについては、PostgreSQL 8.3 のドキュメントの第 51 章をご参照ください。

IBM DB2 と Informix

DB2 の空間インデックスについては、「DB2 Spatial Extender による空間インデックスの作成」をご参照ください。Informix の空間インデックスについては、「Informix のジオデータベースの空間インデックス」をご参照ください。

関連項目


3/6/2012