ITエンジニアの成長ブログ

ITエンジニアとして行う勉強の発信&日々の生活で体験した楽しいことをゆるく発信

SQL Serverの実行計画をテキストで表示する

前回は、以下の記事でSQL Serverの実行計画をグラフィカルに表示する方法を見ていきました。
SQL Serverの実行計画をグラフィカルに表示する - ITエンジニアの成長ブログ

今回は、タイトルどおりグラフィカルではなくテキストベースの結果で取得する方法を見ていきたいと思います。最初にお話しておくと、この方法どちらで取得しても同様の内容が取得できるので、自分の好きな方法で取得すれば良いかなと思います。

テキストベースで実行計画を取得する

それでは、さっそく実行計画をテキストで取得する方法を見ていきましょう。

まずは、「SET STATISTICS PROFILE」で取得する方法を試してみます。
SET STATISTICS PROFILE (Transact-SQL) - SQL Server | Microsoft Learn

使い方としては以下のようにします。「SET STATISTICS PROFILE ON」ステートメントを実行することで、通常の実行結果に加えて実行計画が追加で表示されるようになります。以下のように、「SET STATISTICS PROFILE OFF」の間のステートメントはすべて実行計画が追加で表示されます。

SET STATISTICS PROFILE ON;
GO
-- ここに実行計画を取得するSQL文を記載する START
SELECT * FROM dbo.Table_1;
-- ここに実行計画を取得するSQL文を記載する END
GO
SET STATISTICS PROFILE OFF;
GO


それでは、実際の環境で試してみます。今回は、Microsoftが提供しているサンプルデータベース"AdventureWorks2016"の"[Person].[Address]"テーブルのすべてのレコードを取得するSQLの結果を表示しています。

テキストベースで実行計画を取得した結果1

いかがでしょうか。結果ペインの上段は、実際のクエリの実行結果が表示され、下段になにやら追加で表示されているのが見えます。こちらがテキストベースの実行計画になります。

SQLを実行せずに、実行計画を取得する

テキストベースで取得する方法をもう一つ紹介したいと思います。先ほどは、実際のクエリも実行して実行計画を取得しました。今回紹介する方法は、実際にクエリは実行せずに実行計画を取得する方法です。
SET SHOWPLAN_TEXT (Transact-SQL) - SQL Server | Microsoft Learn

以下のようにします。「SET SHOWPLAN_TEXT ON」ステートメントを実行することで、そのクエリの実行計画のみが追表示されるようになります。以下のように、「SET SHOWPLAN_TEXT OFF」の間のステートメントはすべて実行計画が表示されます。

SET SHOWPLAN_TEXT ON;
GO
-- ここに実行計画を取得するSQL文を記載する START
SELECT * FROM dbo.Table_1;
-- ここに実行計画を取得するSQL文を記載する END
GO
SET SHOWPLAN_TEXT OFF;
GO


それでは、こちらも実際の環境で試してみます。

テキストベースで実行計画を取得した結果2

こちらは上段に実行計画を取得する対象のクエリが表示され、下段には実行計画が表示されています。この方法はクエリの実行方法にのみ関わる情報しか表示されないため、非常にコンパクトな出力結果です。

上記の結果よりさらに、詳細情報を取得するためには以下のように実行します。
SET SHOWPLAN_ALL (Transact-SQL) - SQL Server | Microsoft Learn

テキストベースで実行計画を取得した結果3

構文はほぼ同じですが、「SET SHOWPLAN_ALL」となっており"ALL"が先ほどの簡易な出力結果となる取得方法と異なります。出力結果の細かい説明は割愛しますが、さきほどと比べてたくさんの情報を取得することができます。通常であれば、こちらを使用すれば良いと思います。

ついでにもう一つ説明しておくと、以下のような構文もあります。
SET SHOWPLAN_XML (Transact-SQL) - SQL Server | Microsoft Learn

テキストベースで実行計画を取得した結果4

以下の実行結果のXMLはリンクとなっていて、押下すると以下のようにグラフィカルな結果を表示することができます。

グラフィカルな実行計画

おわりに

いかがでしょうか。今回はSQL Serverの実行計画をテキストベースで取得する方法を見ていきました。

パフォーマンスチューニングでは、ほぼ必ず見ることになるので上手に使っていきたいですね。

今回はこの辺で失礼いたします。最後までお読みいただきありがとうございました。