ユーザーガイド > パフォーマンスチューニング > 半結合最適化オプション > 非等価条件シナリオでの半結合
 
非等価条件シナリオでの半結合
半結合最適化は、非等価条件を使用する結合(非等価結合)にも適用できます。
テーブルの完全な統計情報とカーディナリティが収集されているか、述語のカーディナリティがビューSQLのクエリーオプションで明示的に指定されているのが理想的です。半結合は、テーブルが等価または非等価条件で結合されている場合に使用できます。非等価半結合最適化では、テーブルのカーディナリティを指定する必要があります。そうしないと、クエリーは最適とではないマージ戦略を使用することを余儀なくされます。
例:
SELECT * from DS1.R LEFT OUTER JOIN DS2.T on r1 > t1 and r1 <= t2
 
ターゲット側の述語では、常に次のようなOR形式が使用されます。
(1 > t1 and 1 <= t2) OR (6 > t1 and 6 <= t2) …)
 
半結合ターゲットは、常に結合の直接の子です。
場合によっては、ターゲットが結合の直接の子ではないことがあります。例:
SELECT * from DS1.R INNER JOIN DS2.S INNER JOIN DS3.T on s1=t1 on r2=s2
 
このクエリー例のトポロジーは次のようになります。
2つの半結合が可能です。J2はSをソースとして、Tをターゲットとして持つことができ、J1はRをソースとして、Sをターゲットとして持つことができます。両方の結合で、半結合最適化を同時に使用できます。半結合のソースとターゲットの定義を精密化する必要があります。
半結合を使用する内部結合または左外部結合の場合、結合の直接のLHS子がソースで、ターゲットは結合のRHSサブツリーにあるデータソースに対するFETCHです。特定のFETCHノードターゲットは、テーブル接続を定義するON句によって決定されます。右外部結合の場合、定義は逆になります。
半結合最適化を使用する結合には、複数のターゲットを含めることができます。例:
SELECT * from DS1.D1 INNER JOIN DS2.F INNER JOIN DS1.D2 on ds1=f1 on ds2=ds1
 
D1をソースとして使用する結合では、FとD2の両方をターゲットにできます。複数のノードがDS1をターゲットとしているため、この結合はスタースキーマ半結合として評価できます。