1.13 データ型索引の使用
データ型索引は、RDFネットワークに格納される型付きリテラルの値の索引です。
この索引を使用すると、特定のタイプのFILTER式を含むSEM_MATCH問合せのパフォーマンスが大幅に向上する場合があります。たとえば、xsd:dateTime
リテラルのデータ型索引によって、フィルタ(?x < "1929-11-16T13:45:00Z"^^xsd:dateTime)
の評価の速度が向上する場合があります。索引を作成できるいくつかのデータ型を、表1-30に示します。
表1-30 データ型索引が可能なデータ型
データ型URI | Oracle型 | 索引タイプ |
---|---|---|
http://www.w3.org/2001/XMLSchema#decimal |
NUMBER |
一意でないBツリー( |
http://www.w3.org/2001/XMLSchema#string |
VARCHAR2 |
一意ではないBツリー( |
http://www.w3.org/2001/XMLSchema#time |
TIMESTAMP WITH TIMEZONE |
一意でないBツリー |
http://www.w3.org/2001/XMLSchema#date |
TIMESTAMP WITH TIMEZONE |
一意でないBツリー |
http://www.w3.org/2001/XMLSchema#dateTime |
TIMESTAMP WITH TIMEZONE |
一意でないBツリー |
http://xmlns.oracle.com/rdf/text |
(該当なし) |
CTXSYS.CONTEXT |
http://xmlns.oracle.com/rdf/geo/WKTLiteral |
SDO_GEOMETRY |
SPATIAL_INDEX |
http://www.opengis.net/geosparql#wktLiteral |
SDO_GEOMETRY |
SPATIAL_INDEX |
http://www.opengis.net/geosparql#gmlLiteral |
SDO_GEOMETRY |
SPATIAL_INDEX |
http://xmlns.oracle.com/rdf/like |
VARCHAR2 |
一意でないBツリー |
データ型索引が適切かどうかは、問合せのワークロードに応じて異なります。xsd
データ型でのデータ型索引は、変数を定数値と比較するフィルタに使用可能であり、特に、非常に選択的なフィルタ条件を持つ選択的でないグラフ・パターンが問合せに含まれる場合に役立ちます。適切なデータ型索引は、空間フィルタまたはテキスト・フィルタを使用する問合せに必要です。
データ型索引によって問合せパフォーマンスは向上しますが、徐々に増加する索引のメンテナンスによって、RDFネットワークに対するDMLおよびバルク・ロード操作のパフォーマンスが低下する可能性があります。バルク・ロード操作では、通常、データ型索引を削除し、バルク・ロードを実行してからデータ型索引を再作成する方が高速です。大量のテキスト・データにテキスト索引を作成するには時間がかかるため、テキスト索引の作成時にnologging
がデフォルトで有効になります。ロギングを有効にするには、テキスト索引のadd_datatype_index
APIのオプション・フィールドにLOGGING=T
を指定します。
以下のプロシージャを使ってデータ型索引を追加、変更、削除することができます。これらのプロシージャの説明は、「SEM_APISパッケージのサブプログラム」に記載されています。
既存のデータ型索引に関する情報は、SEM_DTYPE_INDEX_INFOビューに保持されます(表1-31に示す列、およびデータ型索引ごとに1つの行が含まれます)。
表1-31 SEM_DTYPE_INDEX_INFOビューの列
列名 | データ型 | 説明 |
---|---|---|
DATATYPE |
VARCHAR2(51) |
データ型URI |
INDEX_NAME |
VARCHAR2(30) |
索引の名前 |
STATUS |
VARCHAR2(8) |
索引のステータス: |
TABLESPACE_NAME |
VARCHAR2(30) |
索引の表領域 |
FUNCIDX_STATUS |
VARCHAR2(8) |
関数ベース索引の状態。取り得る値は、 |
例1-116
で示されているように、HINT0ヒントを使用すると、問合せの評価中にデータ型索引が使用されるようにできます。これにより、1929年11月16日より前に生まれたすべての祖父が検索されます。
例1-116 HINT0を使用してデータ型索引が使用されるようにする方法
SELECT x, y
FROM TABLE(SEM_MATCH(
'PREFIX : <http://www.example.org/family/>
SELECT ?x ?y
WHERE {?x :grandParentOf ?y . ?x rdf:type :Male . ?x :birthDate ?bd
FILTER (?bd <= "1929-11-15T23:59:59Z"^^xsd:dateTime) }',
SEM_Models('family'),
SEM_Rulebases('RDFS','family_rb'),
null, null, null,
'HINT0={ LEADING(?bd) INDEX(?bd rdf_v$dateTime_idx) }
FAST_DATE_FILTER=T',
null, null,
'RDFUSER', 'NET1' ));
親トピック: RDFグラフの概要