19 空間データを索引付けするためのSQL文

この章では、空間オブジェクト・データ型を使用して動作する場合に使用されるSQL文について説明します。

文の完全なリファレンス情報については、『Oracle Database SQL言語リファレンス』を参照してください。

この章の項「キーワードおよびパラメータ」では、特定のキーワード・グループの先頭を太字のイタリック体で示し、その後にそのグループ固有のキーワードを列挙します。たとえば、INDEX_PARAMSは、索引に関するキーワード・グループの先頭です。

トピック:

19.1 ALTER INDEX

説明

空間索引固有のパラメータを変更します。

構文

ALTER INDEX [schema.]index PARAMETERS ('index_params  [physical_storage_params]' ) 
    [{ NOPARALLEL | PARALLEL [ integer ] }] ;

キーワードおよびパラメータ

説明

INDEX_PARAMS

空間索引の特徴を変更します。

sdo_indx_dims

索引付けする次元数を指定します。たとえば、値に2を指定すると、最初の2次元にのみ索引付けします。実際の次元数以下の値を指定する必要があります。3次元ジオメトリの使用方法の詳細は、「3次元の空間オブジェクト」を参照してください。データ型はNUMBERです。デフォルトは2です。

sdo_rtr_pctfree

索引の作成時は空にしておく、各索引ツリー・ノードのスロットの最小割合を指定します。空のスロットは、後で表に新しいデータを挿入したときにデータが書き込まれます。値は0から50の範囲です。デフォルト値はほとんどのアプリケーションに最適ですが、0はジオメトリ列が更新されない場合に使用してください。データ型は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と同じです。

{ NOPARALLEL | PARALLEL [ integer ] }

索引を使用する後続の問合せおよびDML操作にシリアル(NOPARALLEL)実行を使用するかパラレル(PARALLEL)実行を使用するかを制御します。パラレル実行の場合、並列度を示す整数値を指定できます。PARALLELキーワードの使用に適用されるガイドラインおよび制限事項については、CREATE INDEX文の「使用上の注意」を参照してください。デフォルトはNOPARALLELです。(整数値を指定せずにPARALLELを指定した場合、Oracle Databaseによって最適な並列度が計算されます。)

前提条件

  • 索引タイプおよび索引の実装タイプに対する実行権限が必要です。

  • 変更する空間索引が処理中ではないことが必要です。

使用上の注意

この文を使用して、既存の索引のパラメータを変更します。

使用可能なパラメータについては、CREATE INDEX文の「使用上の注意」を参照してください。

次の例では、BGIという名前の空間索引のパーティションIP2の表領域を変更します。

ALTER INDEX bgi MODIFY PARTITION ip2 
   PARAMETERS ('tablespace=TBS_3');

関連トピック

19.2 ALTER INDEX REBUILD

構文

ALTER INDEX [schema.]index REBUILD  
     [PARAMETERS ('rebuild_params [physical_storage_params]' ) ] 
     [{ NOPARALLEL | PARALLEL [ integer ] }] ;

または

ALTER INDEX [schema.]index REBUILD ONLINE 
     [PARAMETERS ('rebuild_params [physical_storage_params]' ) ] 
     [{ NOPARALLEL | PARALLEL [ integer ] }] ;

または

ALTER INDEX [schema.]index REBUILD PARTITION partition  
     [PARAMETERS ('rebuild_params [physical_storage_params]' ) ];

説明

空間索引、またはパーティション索引の指定されたパーティションを再作成します。

キーワードおよびパラメータ

説明

REBUILD_PARAMS

空間索引の再作成に使用する索引パラメータを、コマンド文字列で指定します。

index_status=cleanup

オンラインの再作成操作(ALTER INDEX REBUILD ONLINE)では、以前のバージョンの索引に関連する表に対して削除操作を実行します。

layer_gtype

すべてのジオメトリが指定されたジオメトリ・タイプであることを確認します。この値は、SDO_GTYPEの「ジオメトリ・タイプ」列の値である必要があります(ただし、UNKNOWN_GEOMETRYを除く)。また、POINTを指定すると、点データの処理を最適化できます。データ型はVARCHAR2です。

sdo_dml_batch_size

コミット操作の後、更新のバッチごとに処理する索引更新の数を指定します。デフォルト値は1000です。たとえば、空間表に3500行を挿入し、その後コミット操作を実行すると、空間索引表に対する更新は、4つのバッチの挿入操作(1000、1000、1000および500)で実行されます。詳細は、CREATE INDEX文の「使用上の注意」を参照してください。データ型は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_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と同じです。

{ NOPARALLEL | PARALLEL [ integer ] }

索引の再作成および索引を使用する後続の問合せおよびDML操作にシリアル(NOPARALLEL)実行を使用するかパラレル(PARALLEL)実行を使用するかを制御します。パラレル実行の場合、並列度を示す整数値を指定できます。PARALLELキーワードの使用に適用されるガイドラインおよび制限事項については、CREATE INDEX文の「使用上の注意」を参照してください。デフォルトはNOPARALLELです。(整数値を指定せずにPARALLELを指定した場合、Oracle Databaseによって最適な並列度が計算されます。)

前提条件

  • 索引タイプおよび索引の実装タイプに対する実行権限が必要です。

  • 変更する空間索引が処理中ではないことが必要です。

使用上の注意

ALTER INDEX REBUILD 'rebuild_params'文は、指定されたパラメータを使用して、索引を再作成します。空間索引の作成とは、基になる表で空間索引付けされる列にある各行に対して索引データを作成し、その索引データを指定された形式で表に挿入することです。基になる表にあるすべての行は、索引データの挿入がコミットされる前に処理されます。これには、適切なロールバック・セグメント領域が必要です。

ONLINEキーワードは、索引をブロックせずに索引を再作成します。つまり、空間索引の再作成中、問合せはそれを使用することが可能です。ただし、再作成操作の間に発行されたすべての問合せが完了したら、SQL文を次の形式で入力し、古い索引情報(MDRT表内)を削除する必要があります。

ALTER INDEX [schema.]index REBUILD ONLINE PARAMETERS ('index_status=cleanup');

ONLINEキーワードの使用には次の制限事項が適用されます。

  • 索引が再作成されている間、許可される操作は問合せのみです。索引の再作成中は、索引に影響を与える、挿入、更新および削除の操作はブロックされます。また、索引に影響を与える、挿入、更新または削除の操作を実行している間は、オンラインの再作成がブロックされます。

  • 'sdo_non_leaf_tbl=TRUE'パラメータを使用して索引が作成されている場合、再作成操作にONLINEキーワードは使用できません。

  • パーティション空間索引にONLINEキーワードは使用できません。

リリース12.1からは、ALTER INDEX REBUILD文では、以前に指定した索引作成パラメータが再利用されます。新しいまたは変更されたパラメータが渡された場合、新しいパラメータは前のパラメータとマージされ、変更されたパラメータは前のパラメータを上書きします。

layer_gtypeキーワードを使用してレイヤー内のデータを1つのジオメトリ・タイプに制限する方法の詳細は、「特定のジオメトリ・タイプへのデータの制限」を参照してください。

パーティション化された空間索引の場合、再作成される各パーティションに対して個別のALTER INDEX REBUILD文を使用する必要があります。

ローカル・パーティション空間索引を使用する場合は、「ローカル・パーティション空間索引の作成」の手順に従います。

使用可能なパラメータおよびPARALLELキーワードの使用方法については、CREATE INDEX文の「使用上の注意」を参照してください。

次の例では、OLDINDEXを再作成し、索引データ表が作成される表領域を指定します。

ALTER INDEX oldindex REBUILD PARAMETERS('tablespace=TBS_3');

関連トピック

19.3 ALTER INDEX RENAME TO

構文

ALTER INDEX [schema.]index RENAME TO <new_index_name>; 

ALTER INDEX [schema.]index PARTITION partition RENAME TO <new_partition_name>;

説明

空間索引または空間索引のパーティションの名前を変更します。

キーワードおよびパラメータ

説明

new_index_name

索引の新しい名前を指定します。

new_partition_name

パーティションの新しい名前を指定します。

前提条件

  • 索引タイプおよび索引の実装タイプに対する実行権限が必要です。

  • 変更する空間索引が処理中ではないことが必要です。

使用上の注意

なし。

次の例では、OLDINDEXの名前をNEWINDEXに変更します。

ALTER INDEX oldindex RENAME TO newindex;

関連トピック

19.4 CREATE INDEX

構文

CREATE INDEX [schema.]index ON [schema.]table (column)  
     INDEXTYPE IS MDSYS.SPATIAL_INDEX_V2 
     [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_non_leaf_tbl=TRUE'と指定すると、索引のリーフ・ノードに対する索引表(名前の形式はMDRT_...$)に加えて、非リーフ・ノードに対する個別の索引表(名前の形式はMDNT_...$)が作成されます。'sdo_non_leaf_tbl=FALSE'と指定すると、索引のリーフ・ノードと非リーフ・ノードの両方に対する1つの表(名前の形式はMDRT_...$)が作成されます。詳細は、「使用上の注意」を参照してください。データ型はVARCHAR2です。デフォルトはFALSEです

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

'securefile=TRUE'の場合は、SecureFilesインテリジェント圧縮が使用され、'securefile=FALSE'の場合は、SecureFilesインテリジェント圧縮は使用されません。詳細は、compressionパラメータの説明を参照してください。データ型はVARCHAR2です。デフォルトは'securefile=FALSE'です

compression

'compression=<OFF|LOW|MEDIUM|HIGH>'では、空間索引ノードの圧縮のレベルを制御します。OFF以外の値を指定するには、'securefile=TRUE'も指定する必要があり、Oracle Advanced Compressionオプションのライセンスが必要で、SecureFilesインテリジェント圧縮を実装する必要があります。詳細は、「使用上の注意」を参照してください。データ型はVARCHAR2です。デフォルトは'compression=OFF'です

{ NOPARALLEL | PARALLEL [ integer ] }

索引の作成および索引を使用する後続の問合せおよびDML操作にシリアル(NOPARALLEL)実行を使用するかパラレル(PARALLEL)実行を使用するかを制御します。パラレル実行の場合、並列度を示す整数値を指定できます。パラレル索引の作成の詳細は、「使用上の注意」を参照してください。デフォルトはNOPARALLELです。(整数値を指定せずにPARALLELを指定した場合、Oracle Databaseによって最適な並列度が計算されます。)

前提条件

  • 現行のSQL CREATE INDEXにあらかじめ必要なことはすべて適用しておきます。

  • 索引タイプおよび索引の実装タイプに対する実行権限が必要です。

  • USER_SDO_GEOM_METADATAビューには、次元および座標境界情報とともに、空間索引付けする表の列に対するエントリが含まれている必要があります。

使用上の注意

空間索引については、「空間データの索引付け」を参照してください。

INDEXTYPE IS MDSYS.SPATIAL_INDEX_V2の"_V2"の説明は、「システム管理空間索引の使用」を参照してください。

空間索引を作成する前に、ロールバック・セグメントのサイズおよび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_V2 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パラメータ(指定した場合)のみが使用され、その他のすべての物理記憶域パラメータにはデフォルト値が使用されます。

LOWMEDIUMまたは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_V2;

関連トピック

19.5 DROP INDEX

構文

DROP INDEX [schema.]index [FORCE];

説明

空間索引を削除します。

キーワードおよびパラメータ

説明

FORCE

索引が処理中であることが明示されている場合、またはなんらかのエラー条件が発生している場合であっても、システム表から空間索引を削除します。

前提条件

索引タイプおよび索引の実装タイプに対する実行権限が必要です。

使用上の注意

CREATE INDEX文が失敗した後、データを削除するには、DROP INDEX索引名FORCEを使用します。

次の例では、索引が処理中またはエラーが発生した場合でも、OLDINDEXという名前の空間索引は強制的に削除されます。

DROP INDEX oldindex FORCE;

関連トピック