10.5 CDIによるパフォーマンス・チューニング
FILTER BY
列をMDATA
にマップできるため、RANGE
およびLIKE
のサポートされる機能を制限することで、等価性検索の問合せパフォーマンスを最適化できます。ただし、FILTER
BY
列に連続した値が含まれているか、またはカーディナリティが非常に高い場合、FILTER
BY
列をMDATA
にマップすることはお薦めしません。このようなマッピングは、非常に時間がかかり、$I
表の範囲が限定され、$X
のパフォーマンスが低下する可能性があります。このような連続した列の一例として、DATE
スタンプを使用した場合があります。このような連続した列の場合は、SDATA
へのマッピングをお薦めします。
SORT
述語およびFILTER
BY
述語をCDIに含めるか含めないかには、次のヒントを使用します。
-
DOMAIN_INDEX_SORT:
問合せオプティマイザは、適用可能なソート基準を指定されたCDIにプッシュしようとします。 -
DOMAIN_INDEX_NO_SORT:
問合せオプティマイザは、適用可能なソート基準を指定されたCDIにプッシュしないようにします。 -
DOMAIN_INDEX_FILTER
(table name index name): 問合せオプティマイザは、適用可能なFILTER
BY
述語を指定されたCDIにプッシュしようとします。 -
DOMAIN_INDEX_NO_FILTER
(table name index name): 問合せオプティマイザは、適用可能なFILTER
BY
述語を指定されたCDIにプッシュしないようにします。
ノート:
domain_index_filter
ヒントは、問合せオプティマイザにCDIの使用を強制しません。かわりに、CBOがCDIの使用を選択している場合は、フィルタ述語も索引に含められます。問合せオプティマイザにCDI索引の選択を強制するには、さらにINDEX
ヒントも使用する必要があります。
例10-1 CDIヒントを使用したOracle Text問合せのパフォーマンス・チューニング
次の例では、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;