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 の使用法 » クエリ処理 » クエリの最適化と実行 » クエリ実行アルゴリズム

 

アクセス・プランの関係代数演算子

アクセス・プランは、関係代数演算子のツリーで構成されます。ツリーのルートで最終的な結果が得られるように、ツリーの最下位から開始して、クエリへの基本入力 (通常はテーブルのロー) を消費し、下から上にローを処理します。アクセス・プランは、わかりやすいようにグラフィカルに表示できます。実行プランの解釈グラフィカルなプランの解釈を参照してください。

SQL Anywhere では、これらの関係代数演算の複数の実装がサポートされています。たとえば、SQL Anywhere では、ネスト・ループ・ジョイン、マージ・ジョイン、ハッシュ・ジョインの 3 つの異なる実装の内部ジョインがサポートされています。これらの演算子は、それぞれ特定の条件での使用に適しています。クエリ・オプティマイザで分析されるパラメータは、キャッシュ内のテーブル・データの量、ジョイン述部の特性と選択性、ジョインへの入力とジョインからの出力のソートの程度、ジョインの実行に使用できるメモリ容量などです。

SQL Anywhere では、実行時に、オプティマイザで選択された物理的な代数演算子から、論理的に同じである別の物理的なアルゴリズムに動的に切り替わる場合があります。一般に、この別のアクセス・プランは次の 2 つの状況で使用されます。

  • 文の実行に使用されるメモリの合計容量がメモリ・ガバナーのしきい値に近いので、実行速度は遅いが、他の演算子 (他の要求) が使用できるようにメモリ容量が解放される方式に切り替わるとき。この場合は、QueryLowMemoryStrategy プロパティが増分されます。この情報は、文のグラフィカルなプランにも表示されます。QueryLowMemoryStrategy プロパティの詳細については、接続プロパティを参照してください。

    演算子で使用できるメモリ容量は、サーバのマルチプログラミング・レベルとアクティブな接続の数によって異なります。

    メモリ・ガバナーとマルチプログラミング・レベルの詳細については、次の項を参照してください。

  • 実行の開始時に特定の演算子 (たとえばハッシュ内部ジョイン) で、入力のカーディナリティが、最適化のときにオプティマイザによって計算されたカーディナリティと異なることが検出されたとき。この場合、演算子が、実行コストが低い別の方式に切り替わる可能性があります。この別の方式では通常はインデックス・ネスト・ループ処理が使用されます。ハッシュ・ジョインの場合は、この切り替えが発生するときに QueryJHToJNLOptUsed プロパティが増分されます。ジョイン方法の切り替えは文のグラフィカルなプランにも含まれます。QueryJHToJNLOptUsed プロパティの詳細については、接続プロパティを参照してください。