SET SHOWPLAN_ALL 的设置是在执行或运行时设置,而不是在分析时设置。
如果 SET SHOWPLAN_ALL 为 ON,则 SQL Server 将返回每个语句的执行信息但不执行语句。Transact-SQL 语句不会被执行。在将此选项设置为 ON 后,将始终返回有关所有后续 Transact-SQL 语句的信息,直到将该选项设置为 OFF 为止。例如,如果在 SET SHOWPLAN_ALL 为 ON 时执行 CREATE TABLE 语句,则 SQL Server 将从涉及同一个表的后续 SELECT 语句返回错误信息,告知用户指定的表不存在。因此,对此表的后续引用将失败。如果 SET SHOWPLAN_ALL 为 OFF,则 SQL Server 将执行语句,但不生成报表。
SET SHOWPLAN_ALL 是供为处理其输出而编写的应用程序使用的。使用 SET SHOWPLAN_TEXT,可为 Microsoft Win32 命令提示符应用程序(如 osql 实用工具)返回可读取的输出。
不能在存储过程内指定 SET SHOWPLAN_TEXT 和 SET SHOWPLAN_ALL,它们必须是批处理中的唯一语句。
SET SHOWPLAN_ALL 将信息作为行集返回,该行集将以层次结构树的形式,表示 SQL Server 查询处理器在执行每个语句时采取的步骤。在输出中,每个语句都有一行说明语句的文本,后面紧接着几行介绍执行步骤的详细信息。
实例:
以下两个语句使用了 SET SHOWPLAN_ALL 设置,用于显示 SQL Server 在查询中分析和优化索引的方式。
第一个查询在 WHERE 子句中使用针对索引列的等于比较运算符 (=)。从而在 LogicalOp 列内得到 Clustered Index Seek 值,在 Argument 列内产生索引名。
第二个查询在 WHERE 子句中使用 LIKE 运算符。这将强制 SQL Server 使用聚集索引扫描并查找满足 WHERE 子句条件的数据。从而在 LogicalOp 列内得到 Clustered Index Scan 值,在 Argument 列内生成索引名;在 LogicalOp 列内产生 Filter 值,在 Argument 列内出现 WHERE 子句条件。
第一个索引查询的 EstimateRows 和 TotalSubtreeCost 属性中的值较小,这表示与非索引查询相比,该查询的处理速度快得多且使用的资源更少。