SET STATISTICS XML (Transact-SQL)

使 Microsoft SQL Server 执行 Transact-SQL 语句,并以定义完善的 XML 文档格式生成有关语句执行情况的详细信息。

主题链接图标Transact-SQL 语法约定

语法

SET STATISTICS XML { ON | OFF }

注释

SET STATISTICS XML 的设置是在执行或运行时设置的,而不是在分析时设置的。

当 SET STATISTICS XML 为 ON 时,SQL Server 将在执行每条语句后返回该语句的执行信息。该选项设置为 ON 后,将返回有关所有后续 Transact-SQL 语句的信息,直到该选项设置为 OFF 为止。请注意,SET STATISTICS XML 不必是批处理中的唯一语句。

SET STATISTICS XML 将为应用程序(如 sqlcmd 实用工具)返回 nvarchar(max) 类型的输出,其中的 XML 输出随后将由其他工具用于显示和处理查询计划信息。

SET STATISTICS XML 返回的信息是一组 XML 文档。SET STATISTICS XML ON 语句后面的每条语句都反映在输出的单个文档中。每个文档都包含该语句的文本,后面是执行步骤的详细信息。此输出显示了诸如开销、访问索引以及所执行操作的类型、联接顺序、某个物理操作的执行次数、每个物理运算符生成的行数等运行时信息。

在安装过程中,将把包含 XML 架构(该架构用于 SET STATISTICS XML 生成的 XML 输出)的文档复制到安装了 Microsoft SQL Server 的计算机的本地目录中。它可以在包含 SQL Server 安装文件的驱动器上找到,具体位置如下:

\Microsoft SQL Server\100\Tools\Binn\schemas\sqlserver\2004\07\showplan\showplanxml.xsd

显示计划架构也可从此网站中找到。

SET STATISTICS PROFILE 和 SET STATISTICS XML 彼此互为对等物。前者生成文本输出;后者生成 XML 输出。在 SQL Server 的未来版本中,新的查询执行计划信息将只通过 SET STATISTICS XML 语句显示,而不通过 SET STATISTICS PROFILE 语句显示。

注意注意

如果在 SQL Server Management Studio 中选定了“包括实际的执行计划”,则该 SET 选项不会生成 XML 显示计划输出。请在使用该 SET 选项之前清除“包括实际的执行计划”按钮。

权限

若要使用 SET STATISTICS XML 并查看输出,用户必须具有以下权限:

  • 执行 Transact-SQL 语句的相应权限。

  • 对包含 Transact-SQL 语句所引用对象的所有数据库的 SHOWPLAN 权限。

对于不生成 STATISTICS XML 结果集的 Transact-SQL 语句,只需要具有执行 Transact-SQL 语句的相应权限。对于生成 STATISTICS XML 结果集的 Transact-SQL 语句,则要求对 Transact-SQL 语句执行权限和 SHOWPLAN 权限的检查必须成功,否则将中止 Transact-SQL 语句的执行,并且不生成任何 Showplan 信息。

有关详细信息,请参阅 显示计划安全性SHOWPLAN 权限和 Transact-SQL 批处理

示例

下面两条语句使用 SET STATISTICS XML 设置,显示 SQL Server 在查询内对索引进行分析和优化的方法。第一个查询在索引列上的 WHERE 子句中使用等于 (=) 比较运算符。第二个查询在 WHERE 子句中使用 LIKE 运算符。这将强制 SQL Server 使用聚集索引扫描并查找满足 WHERE 子句条件的数据。EstimateRowsEstimatedTotalSubtreeCost 属性内用于第一个基于索引的查询的值较小,这表示与非索引查询相比,该查询的处理速度要快得多,且使用的资源较少。

USE AdventureWorks2008R2;
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