ユーザーガイド > パフォーマンスチューニング > 結合のタイプ
 
結合のタイプ
内部結合と外部結合では、等価条件(等価結合)または非等価条件(非等価結合)を使用できます。ほとんどのテーブル結合は等価結合であり、列と行を類似した値で比較します。ネストされたループアルゴリズムは、非等価結合に使用されます。
次の表に、使用されるアルゴリズムと、それらを使用できる結合のタイプを示します。
[Algorithm(アルゴリズム)]
内部等価結合
非等価結合
左/右外部結合
完全外部結合
半結合
最適化
ハッシュ
はい
 
はい
はい
はい
ネストされたループ
はい
はい
はい
はい
はい
ソートマージ
はい
 
はい
 
 
TDVは、複数のアルゴリズムを使用して、テーブル列の結合を実行します。デフォルトでは、TDVクエリーエンジンは、SQLに使用する最適なアルゴリズムと結合最適化を見つけようとします(何も指定されていない場合)。結合プロパティエディターには、次の結合アルゴリズムオプションがあります。
自動オプション
ハッシュ結合オプション
NESTEDLOOP結合オプション
SORTMERGE結合オプション
半結合最適化オプション
スタースキーマ半結合
自動オプション
デフォルトでは、TDVシステムは、左右のカーディナリティの推定値やその他の統計情報を前提として、クエリーのSQL実行プランを自動的に最適化します。自動は、結合アルゴリズムまたは結合最適化ではありませんが、TDVクエリーエンジンが既知のデータベース統計情報を使用したSQLの分析に基づいて最適化を行えるようにします。
SQL実行プランは、他のいずれかのオプションを使用して明示的に指定できます。ただし、結合オプションの指定は、どの結合アルゴリズムまたは最適化が最初に試行されるかにのみ影響します。また、指定した結合オプションが最終的に使用されるとは限りません。オプションの指定がデータソースと適合しないか、正しくない場合、実行プランは指定されていない互換性のある結合に変更される可能性があります。
ハッシュ結合オプション
HASHアルゴリズムは、大量のデータを含むテーブルを結合する場合に役立ちます。オプティマイザーは、内部テーブルを使用し、メモリー内の結合キーに基づいてハッシュテーブルを作成します。次に、外側のテーブルをスキャンし、ハッシュテーブルを調べて結合された行を見つけます。
HASHアルゴリズムでは、各テーブルで1回のパスのみが必要です。内側のテーブルが使用可能なメモリーに収まる場合に最適です。
ただし、ハッシュテーブルが使用可能なメモリーに収まらない場合、オプティマイザーはハッシュテーブルをパーティションに分割し、ディスク上の一時セグメントに書き込みます。
プロセスがディスクに書き込むことが予想される場合は、FORCE_DISKクエリーヒント(『TDV Reference Guide(TDVリファレンスガイド)』を参照)を使用してプロセスが最初からディスクに書き込めるようにすると、読み取り/書き込みサイクルを減らし、過剰なメモリー使用を防止できます。
NESTEDLOOP結合オプション
NESTEDLOOPアルゴリズムは、データ構造情報なしで使用できますが、本質的にパフォーマンスが最適化されているわけではありません。NESTEDLOOPは、データの小さなサブセットが結合され、結合条件が適切なテーブルにアクセスするための効率的な方法である場合に役立ちます。
外側の(駆動)テーブルに内側のテーブルの複数のプローブを強制する行が多数ある場合、NESTEDLOOPアルゴリズムは実行に高いコストがかかります。
SORTMERGE結合オプション
SORTMERGEアルゴリズムはストリーミング演算子です。結合基準と互換性を所与として両方の入力ストリームを順序付けできる場合、結合演算子は小さなメモリー容量で効率的かつ迅速に機能します。
SORTMERGEでは、結合の両側の順序付けなど、その他の要件を課すこともできます。その要件を満たすには、順序付けが結合基準と互換性がある必要があります。たとえば、次の結合基準について考えてみましょう。
ON T1.A = T2.X AND T1.B = T2.Y
 
SORTMERGE結合を実行するには、左側をAとBで昇順にし、右側をXとYで昇順にする必要があります。
一方の側が順序付けされていないか、互換性のある順序付けではない場合、クエリーエンジンは、互換性のあるORDER BYをデータソースにプッシュしてSORTMERGE結合を続行できるかどうかを自動的にチェックします。
ORDER BYをデータソースにプッシュできない場合、SORTMERGEはSQLと互換性がありません。SORTMERGE結合の場合、順序付けは両側で実行する必要があります。
クエリーエンジンによってHASHではなくSORTMERGEが選択されるのを防止するには、次のようにSORTMERGEオプションの値をfalseに指定します。
{option SORTMERGE="false"}