構文
CREATE INDEX [schema.]index ON [schema.]table (column) INDEXTYPE IS MDSYS.SPATIAL_INDEX [PARAMETERS ('index_params [physical_storage_params]' )] [{ NOPARALLEL | PARALLEL [ integer ] }];
用途
SDO_GEOMETRY型の列に空間索引を作成します。
キーワードおよびパラメータ
値 | 説明 |
---|---|
INDEX_PARAMS |
空間索引の特徴を指定します。 |
layer_gtype |
すべてのジオメトリが指定されたジオメトリ・タイプであることを確認します。この値は、SDO_GTYPEの「ジオメトリ・タイプ」列の値である必要があります(ただし、UNKNOWN_GEOMETRYを除く)。また、POINTを指定すると、点データの処理を最適化できます。データ型はVARCHAR2です。 |
sdo_dml_batch_size |
コミット操作の後、更新のバッチごとに処理する索引更新の数を指定します。デフォルト値は1000です。たとえば、空間表に3500行を挿入し、その後コミット操作を実行すると、空間索引表に対する更新は、4つのバッチの挿入操作(1000、1000、1000および500)で実行されます。詳細は、「使用上の注意」を参照してください。データ型はNUMBERです。デフォルトは1000です。 |
sdo_indx_dims |
索引付けする次元数を指定します。たとえば、値に2を指定すると、最初の2次元にのみ索引付けします。実際の次元数以下の値を指定する必要があります。3次元ジオメトリの使用方法については、「3次元の空間オブジェクト」を参照してください。データ型はNUMBERです。デフォルトは2です。 |
sdo_max_memory |
空間索引作成または再作成操作を実行するために割り当てることができる最大メモリー量を指定します。指定できる値は、64000 (約64KB)から200000000 (約200MB)です。指定されたバイト数を割り当てることができない場合は、64000 (約64KB)が割り当てられます。デフォルトより大きい値を指定すると、索引の作成のパフォーマンスが大幅に向上します(ただし、使用可能なメモリーの20%を超える値は指定しないでください)。データ型はNUMBERです。デフォルトは10000000 (約10MB)です。 |
sdo_non_leaf_tbl |
|
sdo_rtr_pctfree |
索引の作成時は空にしておく、各索引ツリー・ノードのスロットの最小割合を指定します。空のスロットは、後で表に新しいデータを挿入したときにデータが書き込まれます。値は0から50の範囲です。データ型はNUMBERです。デフォルトは10です。 |
PHYSICAL_STORAGE_PARAMS |
空間索引のデータ表の作成で使用される記憶域パラメータを指定します。空間索引データ表は、指定された形式を使用した標準のOracle表です。CREATE TABLE文のSTORAGE句内で使用可能なすべての物理記憶域パラメータがサポートされているわけではありません。サポートされているサブセットのリストを次に示します。 |
tablespace |
索引データ表が作成される表領域を指定します。このパラメータは、CREATE TABLE文のSTORAGE句内のTABLESPACEと同じです。 |
initial |
このパラメータは、CREATE TABLE文のSTORAGE句内のINITIALと同じです。 |
next |
このパラメータは、CREATE TABLE文のSTORAGE句内のNEXTと同じです。 |
minextents |
このパラメータは、CREATE TABLE文のSTORAGE句内のMINEXTENTSと同じです。 |
maxextents |
このパラメータは、CREATE TABLE文のSTORAGE句内のMAXEXTENTSと同じです。 |
pctincrease |
このパラメータは、CREATE TABLE文のSTORAGE句内のPCTINCREASEと同じです。 |
work_tablespace |
索引の作成に使用する一時表用の表領域を指定します。(空間Rツリー索引の作成にのみ適用されます。他の索引タイプには適用されません。)作業表領域を指定すると、索引表領域内の断片化は減りますが、最終的な索引の2倍のサイズの記憶域が必要になります(ただし、索引が作成された後はその作業表領域を削除または再使用できます)。 |
securefile |
|
compression |
|
{ NOPARALLEL | PARALLEL [ integer ] } |
索引の作成および索引を使用する後続の問合せおよびDML操作にシリアル(NOPARALLEL)実行を使用するかパラレル(PARALLEL)実行を使用するかを制御します。パラレル実行の場合、並列度を示す整数値を指定できます。パラレル索引の作成の詳細は、「使用上の注意」を参照してください。デフォルトはNOPARALLELです。(整数値を指定せずにPARALLELを指定した場合、Oracle Databaseによって最適な並列度が計算されます。) |
前提条件
現行のSQL CREATE INDEXにあらかじめ必要なことはすべて適用しておきます。
索引タイプおよび索引の実装タイプに対する実行権限が必要です。
USER_SDO_GEOM_METADATAビューには、次元および座標境界情報とともに、空間索引付けする表の列に対するエントリが含まれている必要があります。
使用上の注意
空間索引については、「空間データの索引付け」を参照してください。
空間索引を作成する前に、ロールバック・セグメントのサイズおよびSORT_AREA_SIZEパラメータの値が適切であることを確認する必要があります(「空間索引の作成」を参照)。
線形参照システム(LRS)データにRツリー索引が使用され、LRSデータが4次元(3次元とM次元)を持つ場合、sdo_indx_dims
パラメータを3 (次元数から1を引いた数)に指定して、sdo_indx_dims
のデフォルト値2を上書きする必要があります。デフォルト値では、XおよびY次元のみが索引付けされます。たとえば、次元がX、Y、ZおよびMの場合に、X、YおよびZの各次元を索引付けし、メジャー(M)次元を索引付けしないようにするには、sdo_indx_dims=3
を指定します。(メジャー次元を含むLRSデータ・モデルの詳細は、「LRSデータ・モデル」を参照。)
パーティション表には、パーティション化された空間索引を作成できます。メリットや制限事項など、パーティション化された空間索引の詳細は、「パーティション空間索引の使用」を参照してください。
ローカル・パーティション空間索引を使用する場合は、「ローカル・パーティション空間索引の作成」の手順に従います。
PARALLELキーワードを指定して、索引の作成をパラレル化できます。次に例を示します。
CREATE INDEX cola_spatial_idx ON cola_markets(shape) INDEXTYPE IS MDSYS.SPATIAL_INDEX PARALLEL;
PARALLELキーワードの使用の詳細は、『Oracle Database SQL言語リファレンス』のCREATE INDEX文の項に示すparallel_clause
の説明を参照してください。また、次の注意事項は、空間索引の作成または再作成(ALTER INDEX REBUILD文を使用)にPARALLELキーワードを使用する場合に適用されます。
索引の作成または再作成のパラレル実行によって得られるパフォーマンス・コストおよびメリットは、システムのリソースおよび負荷によって異なります。現在のCPUまたはディスク・コントローラの負荷が高い場合、PARALLELキーワードを指定することはできません。
点データなどの単純なジオメトリを持つ表で索引を作成または再作成するためにPARALLELを指定する場合、通常、複雑なジオメトリを持つ表の場合ほどパフォーマンスは向上しません。
通常の索引で使用可能なその他のオプション(ASC、DESCなど)は空間索引には使用できません。
空間索引の作成とは、基になる表で空間索引付けされる列にある各行に対して索引データを作成し、その索引データを指定された形式で表に挿入することです。基になる表にあるすべての行は、索引データの挿入がコミットされる前に処理されます。これには、適切なロールバック・セグメント領域が必要です。
このパラメータ句で表領域名を指定する場合、ユーザー(基になる表の所有者)には、その表領域に対する適切な権限が必要です。
layer_gtype
キーワードを使用してレイヤー内のデータを1つのジオメトリ・タイプに制限する方法の詳細は、「特定のジオメトリ・タイプへのデータの制限」を参照してください。
sdo_dml_batch_size
パラメータを使用すると、Spatial and Graphは、システムのリソースを事前割当てすることにより、単一の索引更新を連続して実行するよりも効率的に複数の索引更新を実行できるため、アプリケーションのパフォーマンスが向上します(ただし、このメリットを活用するためには、各挿入操作の終了ごとに、またはsdo_dml_batch_size
値以下の間隔でコミット操作を実行しないようにします)。10000 (1万)を超える値を指定すると、パフォーマンスのわずかな向上よりも、追加メモリーおよびその他の必要なリソースのコストのほうが上回ってしまう可能性があるため、そのような値は指定しないことをお薦めします。
'sdo_non_leaf_tbl=TRUE'
と指定すると、Rツリー表全体がKEEPバッファ・プールに入らない場合の、大規模データ・セットでの問合せのパフォーマンスが向上します。この場合、(たとえば、ALTER TABLEを使用してSTORAGE (BUFFER_POOL KEEP)を指定することで)OracleでMDNT_...$表をKEEPバッファ・プールにバッファする必要があります。パーティション索引の場合、すべてのパーティションに同じsdo_non_leaf_tbl
値を使用する必要があります。tablespace
以外のすべての物理記憶域パラメータは、MDRT_...$表にのみ適用されます。MDNT_...$表にはtablespace
パラメータ(指定した場合)のみが使用され、その他のすべての物理記憶域パラメータにはデフォルト値が使用されます。
LOW
、MEDIUM
またはHIGH
の値が設定されたcompression
パラメータでは、SecureFilesインテリジェント圧縮機能が使用されます。圧縮率が高くなれば、発生する待機時間も長くなります。
'compression=HIGH'では、より多くの作業が発生しますが、データの圧縮が向上します。
'compression=LOW'では、ファイル圧縮でよく見られるCPUコストの大部分を軽減する軽量の圧縮アルゴリズムが使用されます。このため、圧縮されたSecureFilesにより、SecureFiles LOB記憶域を非常に効率的に選択できます。LOW
で圧縮されたSecureFiles LOBは、一般的にBasicFiles LOBよりも記憶域とCPU時間を消費せず、ディスクI/Oも減るためアプリケーションの実行を高速化できます。
注意:
OFF
以外の値が設定されたcompression
を使用する場合は、DB_BLOCK_CHECKING
データベース・パラメータをFALSE
またはOFF
に設定します。その他のDB_BLOCK_CHECKING
データベース・パラメータ値をOFF
以外のcompression
値とともに使用すると、空間索引のDML (挿入、更新または削除)操作に悪影響を与える可能性があります。
ファンクション・ベースの空間索引を作成する場合、パラメータ数は32以下である必要があります。ファンクション・ベースの空間索引の使用方法については、「ファンクション索引のSDO_GEOMETRYオブジェクト」を参照してください。
空間索引でのCREATE INDEX文が失敗したかどうかを判断するには、USER_INDEXESビューのDOMIDX_OPSTATUS列にFAILEDがあるかどうかを確認します。通常の索引で確認する(USER_INDEXESビューのSTATUS列にFAILEDがあるかどうか)場合とは異なります。
無効なジオメトリによって、CREATE INDEX文が正常に実行されなかった場合、その原因を示すエラー・メッセージとともに、無効なジオメトリのROWIDが戻されます。
その他の理由でCREATE INDEX文が正常に実行されなかった場合、不十分な状態で作成された索引と関連するメタデータを、DROP INDEX文を使用して削除する必要があります。DROP INDEXが実行できない場合は、FORCEパラメータを付けて再実行してください。
例
次の例では、COLA_SPATIAL_IDXという名前の空間Rツリー索引を作成します。
CREATE INDEX cola_spatial_idx ON cola_markets(shape) INDEXTYPE IS MDSYS.SPATIAL_INDEX;