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;