使用上の注意表に空間索引が含まれない場合、または索引の作成時に指定された次元数と問合せウィンドウの次元数が一致しない場合、この演算子は無効になります。
この演算子は、常にWHERE句で使用される必要があり、この演算子を含む条件式は、SDO_RELATE(arg1, arg2, 'mask = <some_mask_val>') = 'TRUE'の形式である必要があります。(式は'TRUE'以外のどの値とも等しくない必要があります。)
geometry2は表から取り出されるか、または一時的なSDO_GEOMETRYオブジェクト(バインド変数、SDO_GEOMETRYコンストラクタなど)となります。
geometry2列が空間索引付けされていない場合、演算子は問合せウィンドウをメモリー内で索引付けするため、高いパフォーマンスを実現します。
geometry2の2つ以上のジオメトリが演算子に渡される場合は、ORDEREDオプティマイザ・ヒントが指定されている必要があり、geometry2にある表をFROM句の最初に指定する必要があります。
geometry1およびgeometry2が異なる座標系に基づいている場合、geometry2は、「演算子およびファンクションでの座標系が異なるジオメトリの使用」で説明するとおり、操作を実行するため一時的にgeometry1の座標系に変換されます。
SDO_GEOM.RELATEファンクションとは異なり、DISJOINTおよびDETERMINEマスクは、SDO_RELATE演算子との関係マスクで許可されていません。これは、SDO_RELATEが、相互作用する候補を空間索引を使用して検索するため、DISJOINTまたはDETERMINEを満たす情報が索引に存在しないためです。
たとえば'mask=touch+coveredby'のように、論理Boolean演算子ORを使用して複数のマスクを結合できます。リリース12.1からは、SPATIAL_VECTOR_ACCELERATIONシステム・パラメータをTRUEに設定した場合(「SPATIAL_VECTOR_ACCELERATIONシステム・パラメータ」で説明しているように強く推奨されます)、このようなマスクにUNION ALLを使用する必要はありません。ただし、SPATIAL_VECTOR_ACCELERATIONをTRUEに設定しない場合、空間問合せで各マスクを別々に指定し、UNION ALL構文を使用して結果を組み合せるとパフォーマンスが向上する場合があります。これは、マスクが同じSDO_RELATE演算子コールでグループ化されるのではなく、単一指定されるような場合に、Spatial and Graphが適用する内部最適化の結果です。(ただし、2つの例外として、inside+coveredbyおよびcontains+coversでは、UNION ALL構文よりも組合せのパフォーマンスが向上します。)
たとえば、論理ブール演算子ORを使用して複数のマスクをグループ化する次の問合せについて考えてみます。
SELECT a.gid
FROM polygons a, query_polys B
WHERE B.gid = 1
AND SDO_RELATE(A.Geometry, B.Geometry,
'mask=touch+coveredby') = 'TRUE';
SPATIAL_VECTOR_ACCELERATIONがTRUEの場合、前の問合せは最も単純で、パフォーマンスが最適です。ただし、SPATIAL_VECTOR_ACCELEERATIONがFALSEの場合は、この問合せについて、次のように、単一マスクが指定されている複数のSDO_RELATE演算子コールの結果を、UNION ALLを使用して組み合せると、パフォーマンスが向上します。
SELECT a.gid
FROM polygons a, query_polys B
WHERE B.gid = 1
AND SDO_RELATE(A.Geometry, B.Geometry,
'mask=touch') = 'TRUE'
UNION ALL
SELECT a.gid
FROM polygons a, query_polys B
WHERE B.gid = 1
AND SDO_RELATE(A.Geometry, B.Geometry,
'mask=coveredby') = 'TRUE';
線と複数点ジオメトリ(点クラスタ内の複数の点)の関係には次のことを考慮してください。単一線と、3つの点で構成される複数点ジオメトリの例(SDO_GTYPE = 2005など)を想定します。
線と相互作用する点が1つもない場合、線と点クラスタの関係はDISJOINTです。
1つの点が線の内部に位置し、他の2つの点が非接続である場合、線と点クラスタの関係はOVERLAPBDYDISJOINTです。
1つの点が線の境界(線の開始点または終了点)に位置し、他の2つの点が非接続である場合、線と点クラスタの関係はTOUCHです。
1つの点が線の境界(線の開始点または終了点)に、もう1つの点が線の内部に位置し、残りの1つの点が非接続である場合、線と点クラスタの関係はOVERLAPBDYINTERSECTではなく、OVERLAPBDYDISJOINTです。
空間演算子での3Dサポート(計算時にすべての3次元を考慮する演算子または考慮しない演算子)については、「3次元の空間オブジェクト」を参照してください。