空間インデックスと ST_Geometry

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

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

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 のドキュメントをご参照ください。

SQLite

SQLite の空間インデックスは、R-tree インデックスとして使用されるテーブル セットです。

IBM DB2 と Informix

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

関連トピック

5/25/2014