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

 

クエリ処理のフェーズ

この項では、文の注釈フェーズから実行完了までの各フェーズについて説明します。また、オプティマイザの設計の基本となる仮定条件について説明し、次に選択性推定、コスト推定、クエリ処理のステップについて説明します。

結果セットのない文 (UPDATE 文や DELETE 文など) も、クエリ処理のフェーズを経由します。

  • 注釈フェーズ   データベース・サーバは、クエリを受け取ると、パーサを使用して文を解析し、クエリの代数表現 (解析ツリー) に変換します。このフェーズでは、「解析ツリー」はセマンティックと構文のチェック (クエリで参照されるオブジェクトがカタログ内に存在することの検証など)、パーミッションのチェック、定義済み参照整合性制約を使用した KEY JOIN と NATURAL JOIN 変換、非マテリアライズド・ビュー展開などに使用されます。このフェーズの出力は、解析ツリーの形式で書き換えられたクエリで、元のクエリで参照されるすべてのオブジェクトに対する注釈が含まれます。

  • セマンティック変形フェーズ   このフェーズでは、クエリに対して反復的なセマンティック変形を実行します。クエリが注釈付きの解析ツリーとして表されることに変わりはありませんが、リライト最適化 (ジョインの削除、DISTINCT の削除、述部の正規化など) がこのフェーズで適用されます。このフェーズのセマンティック変形は、解析ツリー表現にヒューリスティックに適用されるセマンティック変形規則に従って実行されます。セマンティック・クエリ変形を参照してください。

    データベース・サーバによってプランがキャッシュ済みのクエリは、このクエリ処理のフェーズをスキップします。また、単純な文もこのフェーズをスキップする場合があります。たとえば、オプティマイザのバイパスでヒューリスティック・プラン選択を使用する文の多くは、セマンティック変形フェーズで処理されません。このフェーズが文に適用されるかどうかは SQL 文の複雑さによって決まります。プランのキャッシュクエリ処理のフェーズをスキップするための条件を参照してください。

  • 最適化フェーズ   最適化フェーズでは、クエリの別の内部表現であるクエリ最適化構造体を使用します。クエリ最適化構造体は、解析ツリーから構築されます。オプティマイザの仕組みを参照してください。

    データベース・サーバによってプランがキャッシュ済みのクエリは、このクエリ処理のフェーズをスキップします。また、単純な文もこのフェーズをスキップする場合があります。プランのキャッシュクエリ処理のフェーズをスキップするための条件を参照してください。

    このフェーズは、次の 2 つのサブフェーズに分かれています。

    • 最適化前フェーズ   最適化前フェーズは、後から列挙フェーズで必要になる情報を最適化構造体に設定します。このフェーズでは、クエリを分析し、クエリ・アクセス・プランで使用できる関連するインデックスとマテリアライズド・ビューをすべて検出します。たとえばこのフェーズでは、ビュー・マッチング・アルゴリズムにより、クエリのすべてまたは一部を満たすために使用可能なすべてのマテリアライズド・ビューが特定されます。またオプティマイザは、クエリの述部分析を基にして、クエリのテーブルをジョインするために列挙フェーズで使用可能な代替のジョイン方式を構築します。このフェーズでは、最適なクエリ・アクセス・プランに関する決定は行われません。このフェーズの目的は、列挙フェーズの準備です。

    • 列挙フェーズ   このフェーズでオプティマイザは、最適化前フェーズで生成した構成要素を使用して、クエリの可能なアクセス・プランを列挙します。検索領域は非常に大きいため、オプティマイザは生成に独自の列挙アルゴリズムを使用し、生成されたアクセス・プランを削除します。プランごとにコスト推定が計算されます。コスト推定は、それまでの最適なプランと現在のプランとを比較するために使用されます。この比較時に、コストの高いプランは廃棄されます。コスト推定では、リソースの使用 (ディスクや CPU の操作など)、中間結果のロー数の予測値、最適化ゴール、キャッシュ・サイズなどが考慮されます。列挙プランの出力は、クエリの最適なアクセス・プランです。

  • プラン構築フェーズ   プラン構築フェーズでは、最適なアクセス・プランを利用して、クエリの実行に使用するクエリ実行プランの対応する最終表現を構築します。Interactive SQL のプラン・ビューワで、プランのグラフィカル・バージョンを表示できます。グラフィカルなプランにはツリー構造があり、各ノードは特定の関係代数演算を実装する物理演算子です。たとえば [ハッシュ・ジョイン] や [順序付けされた Group By] は、それぞれジョイン操作や GROUP BY 操作を実装する物理演算子です。グラフィカルなプランの解釈を参照してください。

    データベース・サーバによってプランがキャッシュ済みのクエリは、このクエリ処理のフェーズをスキップします。プランのキャッシュクエリ処理のフェーズをスキップするための条件を参照してください。

  • 実行フェーズ   クエリの結果は、プラン構築フェーズで構築されたクエリ実行プランを使用して計算されます。


クエリ処理のフェーズをスキップするための条件