SET STATISTICS XML (Transact-SQL)

适用于:SQL ServerAzure SQL 数据库Azure SQL 托管实例

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

Transact-SQL 语法约定

语法

  
SET STATISTICS XML { ON | OFF }  

注意

若要查看 SQL Server 2014 (12.x) 及更早版本的 Transact-SQL 语法,请参阅早期版本文档

注解

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 信息。

示例

下面两条语句使用 SET STATISTICS XML 设置,显示 SQL Server 在查询内对索引进行分析和优化的方法。 第一个查询在索引列上的 WHERE 子句中使用等于 (=) 比较运算符。 第二个查询在 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  

另请参阅

SET SHOWPLAN_XML (Transact-SQL)
sqlcmd 实用工具