Click here to view and discuss this page in DocCommentXchange. In the future, you will be sent there automatically.

SQL Anywhere 11.0.1 (日本語) » SQL Anywhere サーバ - SQL の使用法 » クエリ処理 » クエリの最適化と実行 » クエリ実行アルゴリズム » アルゴリズムの種類 » ジョイン・アルゴリズム

 

NestedLoopsJoin アルゴリズム (JNL、JNLFO、JNLO)

NestedLoopsJoin では、左側のローごとに右側全体が読み込まれ、左側と右側のジョインが計算されます(オプティマイザは要求内のブロックごとに適切なジョイン順を選択するため、クエリに含まれるテーブルの構文上の順序は重要ではありません)。

ジョイン条件に等号条件が含まれない場合、または文が First-Row 最適化ゴールで最適化されている場合 (optimization_goal オプションが First-Row に設定されているか、FROM 句でテーブル・ヒントとして FASTFIRSTROW が指定されている場合) に、オプティマイザで NestedLoopsJoin が選択される可能性があります。

NestedLoopsJoin は右側を何回も読み込むため、右側のコストに大きく影響されます。右側がインデックス・スキャンまたは小さなテーブルの場合は、以前の反復でキャッシュされたページを利用して右側を計算できます。ただし、右側が逐次テーブル・スキャンまたは多数のローと一致するインデックス・スキャンの場合は、右側をディスクから何回も読み込みます。通常、NestedLoopsJoin の効率は、他のジョイン方式より低くなります。ただし、NestedLoopsJoin が最初の一致するローを返す速度は、結果全体を計算してから返すジョイン方式より高速です。

ジョインで構成されるクエリに sensitive セマンティックを提供できるジョイン・アルゴリズムは、NestedLoopsJoin だけです。つまり、ジョイン上の sensitive カーソルは、NestedLoopsJoin を使用した場合のみ実行できます。

参照