実行計画の表示方法


SQL Serverには、実行計画の取得方法が複数あります。 最も重要なのは以下の2つです。

グラフィカルな形式

グラフィカルな形式でのSQL Serverの実行計画は、 Management Studioから簡単に表示できます。しかし、 対応する処理の上にマウスを載せた時(hoverした時)しか述語情報が表示されないので、 シェアしづらいのが難点です。

テーブル形式

テーブル形式での実行計画は読みづらいですが、 全ての情報が一度に表示されるので、コピーしやすくなっています。

グラフィカルな形式

グラフィカルな形式での実行計画は、以下のようにハイライトされた 2つのボタンのうちのどちらかから生成します。

左のボタンは、直接ハイライトされている文の実行計画を出します。 右のボタンは、次にSQL文が実行された時に実行計画を保存します。

どちらの場合も、グラフィカルな形式での実行計画は 「Result」ペインの「Execution plan」タブに表示されます。

グラフィカルな形式だと、慣れれば読みやすいでしょう。しかし、 行われる処理と対象のテーブル及びインデックスと言う、非常に基本的な 情報しか表示されません。

マウスを処理の上に動かすと(マウスオーバー)、より詳しい情報が 表示されます。このせいで、実行計画を詳細付きでシェアしづらくなっています。

初心者からエキスパートまで役に立つ内容です。
特に駆け出しのエンジニアは持っておくといい

テーブル形式

テーブル形式でのSQL Serverの実行計画は、 文の実行をプロファイリングする事で取得できます。 これを有効にするには、以下のコマンドを実行します。

SET STATISTICS PROFILE ON

一度有効にすると、文の実行の度に追加の結果セットが生成されます。 例えばselect文の場合、文自体の結果セットと、 実行計画の2つができる事になります。

テーブル形式の実行計画は、StmtText列の情報の 横幅が広すぎるので、SQL Server Management Studioで使うのには 難があります。

この形式の良い点は、情報を失わずにコピーできる事でしょう。 掲示板やその他の場所に、実行計画を貼り付けたりする時に非常に便利です。 このような場合には、StmtText列をコピーし、少しだけ フォーマットを直す位で十分でしょう。

select COUNT(*) from employees;
  |--Compute Scalar(DEFINE:([Expr1004]=CONVERT_IMPLICIT(...))
       |--Stream Aggregate(DEFINE:([Expr1005]=Count(*)))
            |--Index Scan(OBJECT:([employees].[employees_pk]))

そして最後にプロファイリングを無効にします。

SET STATISTICS PROFILE OFF
Photo of Markus Winand
Markus Winand氏は、開発者がSQLパフォーマンスを改善するお手伝いをしています。 彼は、SQL Performance Explainedの 著者でもあり、出張トレーニングhttp://winand.at/での リモート講義も 行っています。