セミジョイン オプションの使用

SQLで半結合を定義するには

1. セミジョインの一部であるテーブルのカーディナリティ統計を収集します。

この統計情報は実行プランに使用されます。

2. LEFT_CARDINALITY クエリ ヒントとその値を含めます。

クエリーオプティマイザーは、このヒントを使用して、より適切なクエリープランを選択します。例:

SELECT column1 FROM table1 INNER {OPTION LEFT_CARDINALITY=10}   
JOIN table2 ON table1.id = table2.id

クエリーオプティマイザーは、LHSカーディナリティがRHSと比較して十分に小さいことがわかっている場合には、半結合を試みます。

LHSカーディナリティが[Max Source Side Cardinality Estimate(ソース側カーディナリティの推定最大値)]の値よりも小さく、LHSカーディナリティと[Min Ratio of Target Cardinality to Source Cardinality(ターゲットカーディナリティとソースカーディナリティの最小比率)]の積がRHSの推定カーディナリティよりも小さい場合、TDVクエリーエンジンは、半結合最適化を使用するようにクエリー実行プランを書き換えようとします。

3. RIGHT_CARDINALITY クエリ ヒントとその値を定義します。

オプティマイザーはヒントを使用して、より適切なクエリ プランを選択します。具体的には、ソース カーディナリティに対するターゲット カーディナリティの最小比率で設定された最小比率に対して LHS カーディナリティをチェックするときに使用されます。

SELECT column1 FROM table1 INNER {OPTION RIGHT_CARDINALITY=10000}   
JOIN table2 ON table1.id = table2.id

テーブルのRHSカーディナリティが不明または指定されていない場合、TDVクエリーアナライザーはテーブルが大きいと想定し、LHSの指定されたカーディナリティに従って半結合を使用するかどうかを決定します。

4. データ ソースで統計が収集されていない場合は、必要に応じて Studio を使用して、最小、最大、および期待されるカーディナリティを指定します。