パーティション表にはパーティション空間索引を作成できます。この項では、Oracle Spatial and Graph固有の使用上の考慮事項について説明します。パーティション表およびパーティション索引の詳細は、『Oracle Database VLDBおよびパーティショニング・ガイド』を参照してください。
パーティション空間索引には、次のメリットがあります。
パーティション化によってディスクI/O操作が削減されるため、長時間実行問合せの応答時間が短縮されます。
I/O操作が各パーティションで同時に実行されるため、同時問合せの応答時間が短縮されます。
パーティション・レベルでの作成および再作成操作によって、索引のメンテナンスが容易になります。
パーティションの索引は、他のパーティションに対する問合せに影響を与えずに再作成できます。また、各ローカル索引の記憶域パラメータは、他のパーティションとは無関係に変更できます。
複数のパーティションの検索にパラレル問合せが実行されます。
並列度は、USER_INDEXESビューに表示される索引の行のDEGREE列の値(CREATE INDEX、ALTER INDEXまたはALTER INDEX REBUILD文のPARALLELキーワードの指定値またはデフォルト値)です。
マルチプロセッサ・システム環境における問合せ処理が向上します。
マルチプロセッサ・システム環境では、パーティション化された空間索引を持つ表に対して空間演算子が使用され、問合せで複数のパーティションが検索される場合、複数のプロセッサを使用して問合せを評価できます。使用されるプロセッサの数は、並列度と、問合せの評価に使用されるパーティションの数によって決まります。
空間索引のパーティション化には、次の制限事項が適用されます。
空間表のパーティション・キーは、空間列ではなく、スカラー値である必要があります。
基になる表では、レンジ・パーティション化のみがサポートされています。その他すべての種類のパーティション化は、パーティション空間索引ではサポートされていません。
パーティション空間索引を作成するには、LOCALキーワードを指定する必要があります。(LOCALキーワードを指定しないと、すべての表パーティションのデータに非パーティション空間索引が作成されます。)次の例ではパーティション空間索引を作成します。
CREATE INDEX counties_idx ON counties(geometry) INDEXTYPE IS MDSYS.SPATIAL_INDEX LOCAL;
この例では、索引パーティションの数および配置に、次のデフォルト値を使用します。
索引のパーティション化は、基になる表のパーティション化に基づきます。表パーティションごとに、対応する索引パーティションが作成されます。
各索引パーティションは、デフォルトの表領域に置かれます。
個々のパーティションに対してパラメータを指定する場合は、次の考慮事項が適用されます。
各パーティションには、各パーティションに同じ記憶特性か、またはそれぞれ異なる記憶特性を指定できます。記憶特性が異なる場合は、パラレルI/O (表領域が異なるディスク上にある場合)が使用可能になり、パフォーマンスが向上する場合があります。
sdo_indx_dims
値には、すべてのパーティションで同じ値を指定する必要があります。
各パーティションに使用されるlayer_gtype
パラメータの値(「特定のジオメトリ・タイプへのデータの制限」を参照)は異なる場合があります。
パーティション化のデフォルト値を上書きするには、次の一般的な形式のCREATE INDEX文を使用します。
CREATE INDEX <indexname> ON <table>(<column>) INDEXTYPE IS MDSYS.SPATIAL_INDEX [PARAMETERS ('<spatial-params>, <storage-params>')] LOCAL [( PARTITION <index_partition> PARAMETERS ('<spatial-params>, <storage-params>') [, PARTITION <index_partition> PARAMETERS ('<spatial-params>, <storage-params>')] )]
パーティション表で問合せを操作して、1つのパーティションのみに対する問合せを実行できます。次に例を示します。
SELECT * FROM counties PARTITION(p1) WHERE ...<some-spatial-predicate>;
複数の問合せを異なるパーティションで同時に操作する場合、選択したパーティションに対する問合せを行うと、問合せが高速化され、スループット全体が向上する場合もあります。
問合せでパーティション空間索引を使用する場合、空間演算子およびファンクションのセマンティック(意味または動作)は、SDO_NN (最も近くにあるもの)の場合を除いて、パーティション索引および非パーティション索引を使用する場合と同じです。SDO_NNの場合、その問合せによって影響されるパーティションごとに、要求した数のジオメトリが戻されます。(詳細は、「空間演算子」のSDO_NN演算子の説明を参照してください。)
たとえば、ある地点に最も近い5つのレストランを要求し、空間索引に4つのパーティションがある場合、SDO_NNは最大20 (5×4)のジオメトリを戻します。この場合、最も近い5つのレストランを戻すためにROWNUM疑似列(ここでは、WHERE ROWNUM <=5
)を、結果を距離(マイル)でソートするためにORDER BY句を使用する必要があります。例5-1では、パーティション空間索引から最も近い5つのレストランを戻します。
注意:
SDO_NN演算子を使用するその他の例については、「SDO_NNの例」を参照してください。
クロススキーマ問合せでは、表にパーティション空間索引がある場合、空間表と、空間表に作成された空間索引の索引表(MDRT_xxx)の両方について、ユーザーにSELECTまたはREAD権限が付与されている必要があります。詳細と例については、「空間演算子」のSDO_JOIN演算子の「使用上の注意」に記載されている「SDO_JOINのクロススキーマでの使用」を参照してください。
例5-1 パーティション空間索引を使用したSDO_NN問合せ
SELECT * FROM ( SELECT r.name, r.location, SDO_NN_DISTANCE(1) distance_in_miles FROM restaurants_part_table r WHERE SDO_NN(r.location, MDSYS.SDO_GEOMETRY(2001,8307,MDSYS.SDO_POINT_TYPE(-110,35,Null),Null,Null), 'SDO_NUM_RES=5 distance=2 unit=MILE', 1) = 'TRUE' ORDER BY distance_in_miles ) WHERE ROWNUM<=5;