SET STATISTICS XML (Transact-SQL)
適用対象: SQL Server
Azure SQL Database
Azure SQL Managed Instance
Microsoft SQL Server で Transact-SQL ステートメントを実行し、ステートメントの実行方法に関する詳細情報を整形式の XML ドキュメント形式で生成します。
構文
SET STATISTICS XML { ON | OFF }
Note
SQL Server 2014 (12.x) 以前のバージョンの Transact-SQL 構文を確認するには、以前のバージョンのドキュメントを参照してください。
解説
SET STATISTICS XML は、解析時ではなく実行時に設定されます。
SET STATISTICS XML が ON の場合、SQL Server は、各ステートメントの実行に関する情報がステートメントの実行後に返されます。 返される情報は、このオプションが ON に設定されてから OFF に設定されるまでに実行されたすべての Transact-SQL ステートメントに関する情報です。 SET STATISTICS XML 以外のステートメントを同時にバッチで実行することもできます。
SET STATISTICS XML では、sqlcmd ユーティリティなどのアプリケーション用に、出力が nvarchar(max) で返されます。この XML 出力は、他のツールがクエリ プランの情報の表示や処理を行う場合に使用されます。
SET STATISTICS XML では、情報が XML ドキュメントのセットとして返されます。 SET STATISTICS XML ON ステートメントの後の各ステートメントは、それぞれ 1 つの出力ドキュメントに反映されます。 それぞれのドキュメントには、ステートメントのテキストと、実行ステップの詳細が含まれます。 この出力では、コスト、アクセスしたインデックス、実行された操作の種類、結合順序、物理操作が実行された回数、それぞれの物理操作で作成された行の数など、実行時の情報が示されます。
SET STATISTICS XML による XML 出力用の XML スキーマを含んだドキュメントは、セットアップ時に、Microsoft SQL Server がインストールされているコンピューター上のローカル ディレクトリへコピーされます。 このドキュメントは、SQL Server のインストール ファイルと同じドライブ上にあります。場所は次のとおりです。
\Microsoft SQL Server\100\Tools\Binn\schemas\sqlserver\2004\07\showplan\showplanxml.xsd
プラン表示スキーマは、こちらの Web サイトにもあります。
SET STATISTICS PROFILE と SET STATISTICS XML は、同時に使用できません。 前者ではテキスト形式の出力が生成され、後者では XML 形式の出力が生成されます。 SQL Server の今後のバージョンでは、新しいクエリ実行プランの情報は SET STATISTICS XML ステートメントでのみ表示され、SET STATISTICS PROFILE ステートメントでは表示されなくなります。
Note
SQL Server Management Studio で [実際の実行プランを含める] を選択すると、この SET オプションを選択しても、XML プラン表示出力が生成されません。 SET オプションを使う前に、[実際の実行プランを含める] ボタンの選択を解除してください。
アクセス許可
SET STATISTICS XML を使用して出力を表示するには、ユーザーに次の権限が必要です。
Transact-SQL ステートメントを実行するための適切な権限。
SHOWPLAN 権限。これは、Transact-SQL ステートメントで参照されるオブジェクトを含むすべてのデータベースに対して必要です。
STATISTICS XML の結果セットを生成しない Transact-SQL ステートメントの場合は、Transact-SQL ステートメントを実行するための適切な権限のみで十分です。 Transact-SQL ステートメントで STATISTICS XML の結果セットを生成する場合は、Transact-SQL ステートメントを実行する権限と、SHOWPLAN の権限の両方があることを確認してください。これらの 2 つの権限がないと、Transact-SQL ステートメントの実行は中断され、プラン表示に関する情報は生成されません。
例
次に示す 2 つのステートメントでは、SET STATISTICS XML の設定を使用し、SQL Server を使用してクエリ内のインデックスの使用状況を分析し最適化する方法を示しています。 最初のクエリでは、インデックス付き列の WHERE 句で = (等しい) 比較演算子を使用します。 2 番目のクエリでは、WHERE 句で LIKE 演算子を使用します。 このように指定すると、SQL Server によってクラスター化インデックス スキャンが行われ、WHERE 句の条件を満たすデータが検索されます。 EstimateRows 属性と EstimatedTotalSubtreeCost 属性の値は、インデックスが設定された最初のクエリの方が小さくなっています。これは、インデックスを設定されていないクエリよりも速く処理が行われ、使用リソースが少なかったことを示しています。
USE AdventureWorks2022;
GO
SET STATISTICS XML ON;
GO
-- First query.
SELECT BusinessEntityID
FROM HumanResources.Employee
WHERE NationalIDNumber = '509647174';
GO
-- Second query.
SELECT BusinessEntityID, JobTitle
FROM HumanResources.Employee
WHERE JobTitle LIKE 'Production%';
GO
SET STATISTICS XML OFF;
GO