你可以通过print()方法向“消息”选项卡输入信息
print('-------打印消息---------')
结果
-------打印消息---------
如图
一、显示执行计划
1.1 显示估计的执行计划
1.2包裹实际的执行计划
1.3 计划结果
详细翻阅:
MSSQLSERVER执行计划详解 - 张龙豪 - 博客园
二、SET STATISTICS IO 语句所生成的磁盘活动量的相关信息
SET STATISTICS IO (Transact-SQL)
导致 SQL Server 显示 Transact-SQL 语句所生成的磁盘活动量的相关信息。
官方地址:SET STATISTICS IO (Transact-SQL) - SQL Server | Microsoft Docs
适用于: 是SQL Server(所有支持的版本) 是Azure SQL 数据库
导致 SQL Server 显示 Transact-SQL 语句所生成的磁盘活动量的相关信息。
语法
SET STATISTICS IO { ON | OFF }
示例
此示例显示 SQL Server 处理语句时,进行了多少次逻辑读和物理读操作。
USE AdventureWorks2012;
GO
SET STATISTICS IO ON; --开启
GO
SELECT *
FROM Production.ProductCostHistory
WHERE StandardCost < 500.00;
GO
SET STATISTICS IO OFF; --关闭
GO
下面是结果集:
Table 'ProductCostHistory'. Scan count 1, logical reads 5, physical
reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0,
lob read-ahead reads 0.
中文提示是这样的
(8 行受影响)
表 'Product'。扫描计数 1,逻辑读取 2 次,物理读取 0 次,预读 0 次,lob 逻辑读取 0 次,lob 物理读取 0 次,lob 预读 0 次。
三、SET STATISTICS TIME 显示分析、编译和执行各语句所需的毫秒数。
SET STATISTICS TIME (Transact-SQL)
适用于: 是SQL Server(所有支持的版本) 是Azure SQL 数据库
显示分析、编译和执行各语句所需的毫秒数。
官方地址:SET STATISTICS TIME (Transact-SQL) - SQL Server | Microsoft Docs
语法
SET STATISTICS TIME { ON | OFF }
示例
下面的示例显示服务器的执行、分析和编译时间。
USE AdventureWorks2012;
GO
SET STATISTICS TIME ON; --开启
GO
SELECT ProductID, StartDate, EndDate, StandardCost
FROM Production.ProductCostHistory
WHERE StandardCost < 500.00;
GO
SET STATISTICS TIME OFF; --关闭
GO
下面是结果集:
SQL Server parse and compile time:
CPU time = 0 ms, elapsed time = 1 ms.
SQL Server parse and compile time:
CPU time = 0 ms, elapsed time = 1 ms.
(269 row(s) affected)
SQL Server Execution Times:
CPU time = 0 ms, elapsed time = 2 ms.
SQL Server parse and compile time:
CPU time = 0 ms, elapsed time = 1 ms.
中文提示是这样的
SQL Server 分析和编译时间:
CPU 时间 = 0 毫秒,占用时间 = 0 毫秒。
(8 行受影响)
SQL Server 执行时间:
CPU 时间 = 0 毫秒,占用时间 = 0 毫秒。
SQL Server 分析和编译时间:
CPU 时间 = 0 毫秒,占用时间 = 7 毫秒。
四、SET SHOWPLAN_ALL 返回有关语句执行情况的详细信息,并估计语句对资源的需求。
SET SHOWPLAN_ALL (Transact-SQL)
适用于: 是SQL Server(所有支持的版本) 是Azure SQL 数据库
使 Microsoft SQL Server 不执行 Transact-SQL 语句。 SQL Server 返回有关语句执行情况的详细信息,并估计语句对资源的需求。
官方地址:SET SHOWPLAN_ALL (Transact-SQL) - SQL Server | Microsoft Docs
语法
SET SHOWPLAN_ALL { ON | OFF }
示例
下面两个语句使用了 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 列中的值较小,这表示与非索引查询相比,该查询的处理速度快得多且使用的资源更少。
USE AdventureWorks2012;
GO
SET SHOWPLAN_ALL ON; --开启
GO
-- First query.
SELECT BusinessEntityID
FROM HumanResources.Employee
WHERE NationalIDNumber = '509647174';
GO
-- Second query.
SELECT BusinessEntityID, EmergencyContactID
FROM HumanResources.Employee
WHERE EmergencyContactID LIKE '1%';
GO
SET SHOWPLAN_ALL OFF; --关闭
GO
结果
五、SET SHOWPLAN_XML 返回有关如何以定义好的 XML 文档格式执行上述语句的详细信息。
SET SHOWPLAN_XML (Transact-SQL)
适用于: 是SQL Server(所有支持的版本) 是Azure SQL 数据库 是Azure SQL 托管实例 是Azure Synapse Analytics
使 SQL Server 不执行 Transact-SQL 语句。 而 SQL Server 返回有关如何以定义好的 XML 文档格式执行上述语句的详细信息。
官方地址:SET SHOWPLAN_XML (Transact-SQL) - SQL Server | Microsoft Docs
语法
SET SHOWPLAN_XML { ON | OFF }
示例
下面两个语句使用了 SET SHOWPLAN_XML 设置,以显示 SQL Server 在查询中分析和优化索引的方法。
第一个查询在 WHERE 子句中使用针对索引列的等于比较运算符 (=)。 第二个查询在 WHERE 子句中使用 LIKE 运算符。 这将强制 SQL Server 使用聚集索引扫描并查找满足 WHERE 子句条件的数据。 第一个索引查询的 EstimateRows 和 EstimatedTotalSubtreeCost 属性中的值较小,这表示与非索引查询相比,该查询的处理速度快得多且使用更少的资源。
USE AdventureWorks2012;
GO
SET SHOWPLAN_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 SHOWPLAN_XML OFF; --关闭
如:我的本地库
USE [DBTase]
GO
SET SHOWPLAN_XML ON;
GO
-- First query.
SELECT *
FROM [dbo].[Product]
GO
-- Second query.
SELECT *
FROM [dbo].[Table_1]
GO
SET SHOWPLAN_XML OFF;
结果
点开后是这样的
内容
<ShowPlanXML xmlns="http://schemas.microsoft.com/sqlserver/2004/07/showplan" Version="1.2" Build="11.0.2100.60"><BatchSequence><Batch><Statements><StmtSimple StatementText="-- First query.
SELECT *
FROM [dbo].[Product]
" StatementId="1" StatementCompId="1" StatementType="SELECT" RetrievedFromCache="false" StatementSubTreeCost="0.0032908" StatementEstRows="8" StatementOptmLevel="TRIVIAL" QueryHash="0x70EFBFC3E62AD95E" QueryPlanHash="0x865F383BA2A66197"><StatementSetOptions QUOTED_IDENTIFIER="true" ARITHABORT="true" CONCAT_NULL_YIELDS_NULL="true" ANSI_NULLS="true" ANSI_PADDING="true" ANSI_WARNINGS="true" NUMERIC_ROUNDABORT="false"/><QueryPlan CachedPlanSize="16" CompileTime="0" CompileCPU="0" CompileMemory="72"><MemoryGrantInfo SerialRequiredMemory="0" SerialDesiredMemory="0"/><OptimizerHardwareDependentProperties EstimatedAvailableMemoryGrant="206836" EstimatedPagesCached="51709" EstimatedAvailableDegreeOfParallelism="2"/><RelOp NodeId="0" PhysicalOp="Clustered Index Scan" LogicalOp="Clustered Index Scan" EstimateRows="8" EstimateIO="0.003125" EstimateCPU="0.0001658" AvgRowSize="69" EstimatedTotalSubtreeCost="0.0032908" TableCardinality="8" Parallel="0" EstimateRebinds="0" EstimateRewinds="0" EstimatedExecutionMode="Row"><OutputList><ColumnReference Database="[DBTase]" Schema="[dbo]" Table="[Product]" Column="ID"/><ColumnReference Database="[DBTase]" Schema="[dbo]" Table="[Product]" Column="TypeID"/><ColumnReference Database="[DBTase]" Schema="[dbo]" Table="[Product]" Column="Name"/></OutputList><IndexScan Ordered="0" ForcedIndex="0" ForceScan="0" NoExpandHint="0"><DefinedValues><DefinedValue><ColumnReference Database="[DBTase]" Schema="[dbo]" Table="[Product]" Column="ID"/></DefinedValue><DefinedValue><ColumnReference Database="[DBTase]" Schema="[dbo]" Table="[Product]" Column="TypeID"/></DefinedValue><DefinedValue><ColumnReference Database="[DBTase]" Schema="[dbo]" Table="[Product]" Column="Name"/></DefinedValue></DefinedValues><Object Database="[DBTase]" Schema="[dbo]" Table="[Product]" Index="[PK_Product]" IndexKind="Clustered"/></IndexScan></RelOp></QueryPlan></StmtSimple></Statements></Batch></BatchSequence></ShowPlanXML>
六、SET SHOWPLAN_TEXT 返回有关如何执行语句的详细信息
SET SHOWPLAN_TEXT (Transact-SQL)
适用于: 是SQL Server(所有支持的版本) 是Azure SQL 数据库
使 Microsoft SQL Server 不执行 Transact-SQL 语句。 而是由 SQL Server 返回有关如何执行语句的详细信息。
官方地址:SET SHOWPLAN_TEXT (Transact-SQL) - SQL Server | Microsoft Docs
语法
SET SHOWPLAN_TEXT { ON | OFF }
示例
此例显示 SQL Server 在处理语句时如何使用索引。
下面是使用索引的查询:
USE AdventureWorks2012;
GO
SET SHOWPLAN_TEXT ON; --开启
GO
SELECT *
FROM Production.Product
WHERE ProductID = 905;
GO
SET SHOWPLAN_TEXT OFF; --关闭
GO
下面是结果集:
StmtText
---------------------------------------------------
SELECT *
FROM Production.Product
WHERE ProductID = 905;
StmtText
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|--Clustered Index Seek(OBJECT:([AdventureWorks2012].[Production].[Product].[PK_Product_ProductID]), SEEK:([AdventureWorks2012].[Production].[Product].[ProductID]=CONVERT_IMPLICIT(int,[@1],0)) ORDERED FORWARD)
下面是不使用索引的查询:
USE AdventureWorks2012;
GO
SET SHOWPLAN_TEXT ON; --开启
GO
SELECT *
FROM Production.ProductCostHistory
WHERE StandardCost < 500.00;
GO
SET SHOWPLAN_TEXT OFF; --关闭
GO
下面是结果集:
StmtText
------------------------------------------------------------------------
SELECT *
FROM Production.ProductCostHistory
WHERE StandardCost < 500.00;
StmtText
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|--Clustered Index Scan(OBJECT:([AdventureWorks2012].[Production].[ProductCostHistory].[PK_ProductCostHistory_ProductCostID]), WHERE:([AdventureWorks2012].[Production].[ProductCostHistory].[StandardCost]<[@1]))
我的测试
GO
SET SHOWPLAN_TEXT ON; --开启
GO
SELECT *
FROM [dbo].[Table_1]
GO
SET SHOWPLAN_TEXT OFF; --关闭
GO