NestedLoopsJoin では、左側のローごとに右側全体が読み込まれ、左側と右側のジョインが計算されます(オプティマイザは要求内のブロックごとに適切なジョイン順を選択するため、クエリに含まれるテーブルの構文上の順序は重要ではありません)。
ジョイン条件に等号条件が含まれない場合、または文が First-Row 最適化ゴールで最適化されている場合 (optimization_goal オプションが First-Row に設定されているか、FROM 句でテーブル・ヒントとして FASTFIRSTROW が指定されている場合) に、オプティマイザで NestedLoopsJoin が選択される可能性があります。
NestedLoopsJoin は右側を何回も読み込むため、右側のコストに大きく影響されます。右側がインデックス・スキャンまたは小さなテーブルの場合は、以前の反復でキャッシュされたページを利用して右側を計算できます。ただし、右側が逐次テーブル・スキャンまたは多数のローと一致するインデックス・スキャンの場合は、右側をディスクから何回も読み込みます。通常、NestedLoopsJoin の効率は、他のジョイン方式より低くなります。ただし、NestedLoopsJoin が最初の一致するローを返す速度は、結果全体を計算してから返すジョイン方式より高速です。
ジョインで構成されるクエリに sensitive セマンティックを提供できるジョイン・アルゴリズムは、NestedLoopsJoin だけです。つまり、ジョイン上の sensitive カーソルは、NestedLoopsJoin を使用した場合のみ実行できます。
Copyright © 2009, iAnywhere Solutions, Inc. - SQL Anywhere 11.0.1 |