この章では、空間オブジェクト・データ型を使用して動作する場合に使用されるSQL文について説明します。表18-1に文を示します。
表18-1 空間索引付けに使用する文
文 | 説明 |
---|---|
|
空間索引固有のパラメータを変更します。 |
|
空間索引、またはパーティション索引の指定されたパーティションを再作成します。 |
|
空間索引または空間索引のパーティションの名前を変更します。 |
|
SDO_GEOMETRY型の列に空間索引を作成します。 |
|
空間索引を削除します。 |
この章では、空間索引にこれらのSQL文を使用する方法を説明します。文の完全なリファレンス情報については、『Oracle Database SQL言語リファレンス』を参照してください。
この章の項「キーワードおよびパラメータ」では、特定のキーワード・グループの先頭を太字のイタリック体で示し、その後にそのグループ固有のキーワードを列挙します。たとえば、INDEX_PARAMS は、索引に関するキーワード・グループの先頭です。
構文
ALTER INDEX [schema.]index PARAMETERS ('index_params [physical_storage_params]' )
[{ NOPARALLEL | PARALLEL [ integer ] }] ;
キーワードおよびパラメータ
値 | 説明 |
---|---|
INDEX_PARAMS | 空間索引の特徴を変更します。 |
sdo_indx_dims | 索引付けする次元数を指定します。たとえば、値に2を指定すると、最初の2次元にのみ索引付けします。実際の次元数以下の値を指定する必要があります。3次元ジオメトリに関連する使用方法の詳細は、1.11項を参照してください。データ型は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によって最適な並列度が計算されます。) |
例
次の例では、BGIという名前の空間索引のパーティションIP2の表領域を変更します。
ALTER INDEX bgi MODIFY PARTITION ip2 PARAMETERS ('tablespace=TBS_3');
構文
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 | すべてのジオメトリが指定されたジオメトリ・タイプであることを確認します。この値は、2.2.1項に掲載した表2-1の「ジオメトリ・タイプ」列の値である必要があります(ただし、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次元ジオメトリに関連する使用方法の詳細は、1.11項を参照してください。データ型はNUMBERです。デフォルトは2です。 |
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キーワードは使用できません。
ALTER INDEX REBUILD文では、以前に指定した索引作成パラメータを使用できません。再作成する索引に対して、すべてのパラメータを指定する必要があります。
layer_gtype
キーワードを使用してレイヤー内のデータを1つのジオメトリ・タイプに制限する方法の詳細は、5.1.1項を参照してください。
パーティション化された空間索引の場合、再作成される各パーティションに対して個別のALTER INDEX REBUILD文を使用する必要があります。
ローカル・パーティション空間索引を使用する場合は、5.1.3.1項の手順に従います。
使用可能なパラメータおよびPARALLELキーワードの使用方法については、CREATE INDEX文の「使用上の注意」を参照してください。
例
次の例では、OLDINDEXを再作成し、索引データ表が作成される表領域を指定します。
ALTER INDEX oldindex REBUILD PARAMETERS('tablespace=TBS_3');
構文
CREATE INDEX [schema.]index ON [schema.]table (column)
INDEXTYPE IS MDSYS.SPATIAL_INDEX
[PARAMETERS ('index_params [physical_storage_params]' )]
[{ NOPARALLEL | PARALLEL [ integer ] }] ;
キーワードおよびパラメータ
値 | 説明 |
---|---|
INDEX_PARAMS | 空間索引の特徴を指定します。 |
layer_gtype | すべてのジオメトリが指定されたジオメトリ・タイプであることを確認します。この値は、2.2.1項に掲載した表2-1の「ジオメトリ・タイプ」列の値である必要があります(ただし、UNKNOWN_GEOMETRYを除く)。また、POINTを指定すると、点データの処理を最適化できます。データ型はVARCHAR2です。 |
sdo_dml_batch_size | コミット操作の後、更新のバッチごとに処理する索引更新の数を指定します。デフォルト値は1000です。たとえば、空間表に3500行を挿入し、その後コミット操作を実行すると、空間索引表に対する更新は、4つのバッチの挿入操作(1000、1000、1000および500)で実行されます。詳細は、「使用上の注意」を参照してください。データ型はNUMBERです。デフォルトは1000です。 |
sdo_indx_dims | 索引付けする次元数を指定します。たとえば、値に2を指定すると、最初の2次元にのみ索引付けします。実際の次元数以下の値を指定する必要があります。3次元ジオメトリに関連する使用方法の詳細は、1.11項を参照してください。データ型はNUMBERです。デフォルトは2です。 |
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倍のサイズの記憶域が必要になります(ただし、索引が作成された後はその作業表領域を削除または再使用できます)。 |
{ NOPARALLEL | PARALLEL [ integer ] } | 索引の作成および索引を使用する後続の問合せおよびDML操作にシリアル(NOPARALLEL)実行を使用するかパラレル(PARALLEL)実行を使用するかを制御します。パラレル実行の場合、並列度を示す整数値を指定できます。パラレル索引の作成の詳細は、「使用上の注意」を参照してください。デフォルトはNOPARALLELです。(整数値を指定せずにPARALLELを指定した場合、Oracle Databaseによって最適な並列度が計算されます。) |
前提条件
現行のSQL CREATE INDEXにあらかじめ必要なことはすべて適用しておきます。
索引タイプおよび索引の実装タイプに対する実行権限が必要です。
USER_SDO_GEOM_METADATAビューには、次元および座標境界情報とともに、空間索引付けする表の列に対するエントリが含まれている必要があります。
使用上の注意
空間索引については、1.7項を参照してください。
空間索引を作成する前に、ロールバック・セグメントのサイズおよびSORT_AREA_SIZEパラメータの値が適切であることを確認する必要があります(5.1項を参照)。
線形参照システム(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データ・モデルの詳細は、7.2項を参照。)
パーティション表には、パーティション化された空間索引を作成できます。メリットや制限事項など、パーティション化された空間索引の詳細は、5.1.3項を参照してください。
ローカル・パーティション空間索引を使用する場合は、5.1.3.1項の手順に従います。
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つのジオメトリ・タイプに制限する方法の詳細は、5.1.1項を参照してください。
sdo_dml_batch_size
パラメータを使用すると、Spatialは、システムのリソースを事前割当てすることにより、単一の索引更新を連続して実行するよりも効率的に複数の索引更新を実行できるため、アプリケーションのパフォーマンスが向上します(ただし、このメリットを活用するためには、各挿入操作の終了ごとに、または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
パラメータ(指定した場合)のみが使用され、その他のすべての物理記憶域パラメータにはデフォルト値が使用されます。
ファンクション・ベースの空間索引を作成する場合、パラメータ数は32以下である必要があります。ファンクション・ベースの空間索引の使用方法については、9.2項を参照してください。
空間索引でのCREATE INDEX文が失敗したかどうかを判断するには、USER_INDEXESビューのDOMIDX_OPSTATUS列にFAILEDがあるかどうかを確認します。通常の索引で確認する(USER_INDEXESビューのSTATUS列にFAILEDがあるかどうか)場合とは異なります。
無効なジオメトリによって、CREATE INDEX文が正常に実行されなかった場合、その原因を示すエラー・メッセージとともに、無効なジオメトリのROWIDが戻されます。
その他の理由でCREATE INDEX文が正常に実行されなかった場合、不十分な状態で作成された索引と関連するメタデータを、DROP INDEX文を使用して削除する必要があります。DROP INDEXが実行できない場合は、FORCEパラメータを付けて再実行してください。