グラフィカル実行プランの表示 (SQL Server Management Studio)

SQL Server Management Studio は、対話的でグラフィカルなツールです。データベースの管理者や開発者はこのツールを使用して、クエリの作成、複数のクエリの同時実行、結果の表示、およびクエリ プランの分析を行うことができます。また、クエリのパフォーマンス向上にも役立ちます。実行プランのオプションでは、SQL Server クエリ オプティマイザによって選択されたデータ取得方法がグラフィカルに表示されます。グラフィカル実行プランでは、SQL Server での特定のステートメントおよびクエリの実行がアイコンで表されます。この点が、表形式で表す Transact-SQL の SET ステートメント オプションである SET SHOWPLAN_ALL または SET SHOWPLAN_TEXT や、XML 形式で表す SET SHOWPLAN_XML とは異なります。グラフィカルな表示は、クエリのパフォーマンスの特徴を理解するうえで役立ちます。SQL Server Management Studio では、どのような統計情報が欠如しているかを示し、クエリ オプティマイザに述語の選択に関して評価させ、欠如する統計情報を簡単に作成できるようにします。

注意

暗号化されているストアド プロシージャまたはトリガでは、実行プランは表示されません。

実行プランのオプションの使用

Management Studio クエリ エディタで、分析するクエリが含まれている Transact-SQL スクリプトを開くか入力します。Management Studio クエリ エディタにスクリプトを読み込んだら、ツール バーの [推定実行プランの表示] ボタンまたは [実際の実行プランを含める] ボタンをクリックして、推定実行プランを表示するか、実際の実行プランを表示するかを選択できます。[推定実行プランの表示] ボタンをクリックすると、スクリプトが解析されて推定実行プランが生成されます。[実際の実行プランを含める] をクリックした場合は、実行プランを生成する前にスクリプトを実行する必要があります。スクリプトが解析または実行された後、[実行プラン] タブをクリックし、実行プラン出力のグラフィカル表現を確認します。

Management Studio でグラフィカル実行プラン機能を使用したり、プラン表示 Transact-SQL の SET ステートメント オプションを使用したりするには、Transact-SQL ステートメントおよびクエリを実行するための十分な権限を持っている必要があります。また、参照するオブジェクトが含まれているすべてのデータベースに対する SHOWPLAN 権限も許可されている必要があります。詳細については、「プラン表示のセキュリティ」を参照してください。

グラフィカル実行プランの出力の読み方

実行プランを表示するには、結果ペインの [実行プラン] タブをクリックします。SQL Server Management Studio のグラフィカル実行プランの出力は、右から左、上から下に読みます。分析されたバッチ内の各クエリが表示されます。各クエリのコストも、バッチの総コストに占める割合として表示されます。Management Studio で実行プランの表示に使用されるアイコンの詳細については、「グラフィカルな実行プランのアイコン (SQL Server Management Studio)」を参照してください。

次に、Management Studio のグラフィカル実行プランの出力を解釈するためのガイドラインについて説明します。

  • ツリー構造の各ノードはアイコンとして表されます。各アイコンは、クエリまたはステートメントの実行部分に使用される論理操作または物理操作を指定します。

  • 各ノードは親ノードに関連付けられています。同じ親を持つ子ノードは同じ列に描かれています。ただし、同じ列のすべてのノードが必ずしも同じ親を持つとは限りません。各ノードは矢印付きの線によって親ノードに接続されています。

  • 操作は特定の親に関連付けられた記号として示されています。

  • 矢印の幅は行数に比例します。実際の行数が使用可能な場合はその行数が使用されます。使用できない場合は予測行数が使用されます。

  • クエリに複数のステートメントがある場合、複数のクエリ実行プランが表示されます。

  • ツリー構造の部分は、実行されるステートメントの種類によって決まります。

  • 複数の CPU が関係する並列クエリの場合、グラフィカル実行プランの各ノードの [プロパティ] オプションを使用して、使用されたオペレーティング システム スレッドに関する情報を表示できます。ノードのプロパティを表示するには、ノードを右クリックして [プロパティ] をクリックします。並列クエリの詳細については、「並列クエリ処理」を参照してください。

    ステートメントの種類

    ツリー構造の要素

    Transact-SQL とストアド プロシージャ

    ステートメントがストアド プロシージャまたは Transact-SQL ステートメントである場合、グラフィカル実行プランのツリー構造のルートになります。ストアド プロシージャは、ストアド プロシージャによって呼び出されるステートメントを表す複数の子を持つことができます。子はそれぞれツリーのノード (分岐) です。

    データ操作言語 (DML)

    SQL Server クエリ オプティマイザによって分析されるステートメントが、SELECT、INSERT、DELETE、UPDATE などの DML ステートメントである場合、その DML ステートメントはツリーのルートになります。DML ステートメントは 2 つまでの子を持つことができます。最初の子は DML ステートメントの実行プランです。2 番目の子はトリガを表します (ステートメント内またはステートメントによって使用される場合)。

    条件ステートメント

    グラフィカル実行プランでは、条件ステートメントを 3 つの子に分割します。条件ステートメントには、IF...ELSE ステートメント (条件が合えば次の処理を行い、合わなければ別のステートメントを実行) などがあります。IF...ELSE ステートメントはツリーのルートになります。IF 条件はサブツリーのノードになります。THEN と ELSE 条件はステートメント ブロックとして表されます。WHILE ステートメントと DO-UNTIL ステートメントも同様のプランを使用して表されます。IF および WHILE ステートメントには独自のアイコンがあります。

    関係演算子

    テーブル スキャン、結合、集計など、クエリ エンジンによって実行される操作はツリーのノードとして表されます。

    DECLARE CURSOR

    DECLARE CURSOR ステートメントは、グラフィカル実行プラン ツリーのルートになります。関連するステートメントを子またはノードとして持ちます。

次の 3 種類のアイコンがそれぞれ色分けされています。イテレータ (論理および物理操作) アイコンは青色、カーソル アイコンは黄色、言語要素は緑色です。

グラフィカル実行プランのノードのツールヒント

次の表では、ノード上にカーソルを置いたときに表示される情報について説明します。ここで説明する情報は、グラフィカル実行プランのすべてのノードに表示されるわけではありません。

情報の内容

説明

物理操作

使用されている物理操作。たとえば、Hash Join、Nested Loops などです。赤く表示される物理操作は、クエリ オプティマイザが警告を出していることを示します。たとえば、列統計情報が抜けていたり、結合述語が抜けていたりする場合です。この場合、クエリ オプティマイザは通常より効率の悪いクエリ プランを選択することがあります。列の統計情報の詳細については、「クエリのパフォーマンスを向上させるための統計の使用」を参照してください。

統計情報の作成または更新、あるいはインデックスの作成がグラフィカル実行プランによって提案されている場合、欠落している列統計情報およびインデックスは、SQL Server Management Studio のオブジェクト エクスプローラのショートカット メニューを使用することで簡単に作成または更新できます。詳細については、「インデックスの操作方法に関するトピック」を参照してください。

論理操作

Inner Join 操作など、物理操作に一致する論理操作。情報ボックスの一番上に物理操作が表示され、その後に論理操作が表示されます。

行の推定サイズ

操作によって生成される行の推定サイズ (バイト単位)。

I/O の推定コスト

操作のすべての I/O 利用状況の推定コスト。値はできるだけ低くします。

CPU の推定コスト

操作のすべての CPU 利用状況の推定コスト。

操作の推定コスト

この操作を実行するためのクエリ オプティマイザのコスト。クエリの総コストに対するこの操作のコストの割合は、かっこ内に表示されます。クエリ エンジンは、クエリまたはステートメントを最も効率的に実行する操作を選択するため、値はできるだけ小さくします。

サブツリーの推定コスト

この操作および同じサブツリー内のその前にあるすべての操作を実行する場合に、クエリ オプティマイザにかかる総コスト (サブツリー コスト)。

予測行数1

操作によって生成された行の数。

1 この情報は、実際の実行プランに [行数] として表示されます。

注意

SQL Server 2000 でグラフィカル実行プランの引数フィールドに表示されていた情報は、グラフィカル実行プランのツールヒントに別個に表示されるようになりました。

グラフィカル実行プランのノードのプロパティ

ノードを右クリックして [プロパティ] をクリックすると、グラフィカル実行プランのノードに関する詳細情報を表示できます。