FILTER BY列のMDATAへのマッピングがサポートされているため、RANGEおよびLIKEのサポートされた機能を制限することで、問合せのパフォーマンスは等価性検索に対して最適化されます。ただし、FILTER BY列が連続した値を含むかまたはそのカーディナリティが非常に高い場合は、FILTER BY列のMDATAへのマッピングはお薦めしません。このようなマッピングは、非常に時間がかかり、$I表の範囲が限定され、$Xのパフォーマンスが低下する可能性があります。このような連続した列の一例として、DATEスタンプを使用した場合があります。このような連続した列の場合は、SDATAへのマッピングをお薦めします。
SORT述語およびFILTER BY述語をCDIに含めるか含めないかには、次のヒントを使用できます。
DOMAIN_INDEX_SORT。問合せオプティマイザは、適用可能なソート条件を、指定したコンポジット・ドメイン索引に含めようとします。
DOMAIN_INDEX_NO_SORT。問合せオプティマイザは、ソート条件を、指定したコンポジット・ドメイン索引に含めないようにします。
DOMAIN_INDEX_FILTER(table name index name)。問合せオプティマイザは、適用可能なFILTER BY述語を、指定したコンポジット・ドメイン索引に含めます。
DOMAIN_INDEX_NO_FILTER(table name index name)。問合せオプティマイザは、適用可能なFILTER BY述語を、指定したコンポジット・ドメイン索引に含めないようにします。
注意:
domain_index_filterヒントは、問合せオプティマイザにCDIの使用を強制しません。かわりに、コストベース・オプティマイザがCDIの使用を選択している場合は、フィルタ述語も索引に含められます。問合せオプティマイザにCDI索引の選択を強制するには、さらにINDEXヒントも使用する必要があります。
例7-1 CDIヒントを使用したテキスト問合せのパフォーマンス・チューニング
次の例では、表booksに対し、最適化された問合せを実行しています。
SELECT bookid, pub_date, source FROM
(SELECT /*+ domain_index_sort domain_index_filter(books books_ctxcdi) */ bookid, pub_date, source
FROM books
WHERE CONTAINS(text, 'aaa',1)>0 AND bookid >= 80
ORDER BY PUB_DATE desc nulls last, SOURCE asc nulls last, score(1) desc)
WHERE rownum < 20;