11.4. 処理
結合アルゴリズム
ネストされたループは最も明らかな処理を行います。外元のソースのすべての行については、内部ソースのすべての行と比較されます。ネストされたループは、結合基準に equi-join 述語がない場合のみ使用されます。
マージ結合は最初に結合した列で入力ソースをソートします。各サイドを並行して実施できます(ソートされたソースごとに 1 つを渡し、一致する場合は行を生成します)。 通常、マージ参加は、ネストされたループでは n*m ではなく n+m の順序になります。 マージ結合はデフォルトのアルゴリズムです。
エンジンはコスト情報を使用することで、完全なソートマージの結合が意思決定を遅らせる可能性があります。エンジンは、実際に関連する行数に基づいて、小さい側のインデックスを構築する(ハッシュ参加と同様のもの)か、関係の大きいものだけを部分的に並べ替えたりを選択できます。
equi-join 述語を伴う結合は、依存する結合に変換することができます。詳細は、Federated optimizations の「 Dependent joins 」を参照してください。
ソートベースのアルゴリズム
並べ替えは、Soritch(ORDER BY)、Grouping(GROUP BY)、および DupRemoval(SELECT DISTINCT)操作のベースとして使用されます。 ソートアルゴリズムは、すべての結果セットをメモリーに入れる必要がないマルチパスマージ手段で、バッファーマネージャーで許可される最大メモリー容量を使用します。
並べ替えは 2 つのフェーズで構成されます。 最初のフェーズ("sort")では、アルゴリズムはソートされていない入力ストリームを処理し、1 つ以上のソートされた入力ストリームを生成します。 それぞれのパスでは、分類されていないストリームをできる限り読み取り、ソートし、新しいストリームとして書き直します。分類されていないストリームが処理されると、生成されるソートストリームがメモリーに存在するために大きすぎる可能性があります。ソートされたストリームのサイズが利用可能なメモリーを超える場合、これは複数のソートされたストリームに書き込まれます。
ソートアルゴリズム(マージ)の 2 番目のフェーズは、ソートされた入力ストリームの数から次のバッチを取り除く一連のフェーズで構成されます。 その後、各ストリームからソート順に次のタプルを繰り返し取得し、ソートされたバッチを新しいソートストリームにマージします。 フェーズが完了すると、すべての入力ストリームがドロップされます。 これにより、各フェーズはソートされたストリームの数を減らします。 1 つのストリームのみが残っている場合は、最終出力になります。