Home >Database >Mysql Tutorial >查看sql语句执行时间

查看sql语句执行时间

WBOY
WBOYOriginal
2016-06-07 15:13:142107browse

资料来自于:http://technet.microsoft.com/zh-cn/library/ms187735(SQL.90).aspx SET SHOWPLAN_ALL (Transact-SQL) 使 Microsoft SQL Server 不 执行 Transact-SQL 语句 。SQL Server 返回有关 语句 执行 情况的详细信息,并估计 语句 对资源的需求。 语法

 

资料来自于:http://technet.microsoft.com/zh-cn/library/ms187735(SQL.90).aspx

 

 

SET SHOWPLAN_ALL (Transact-SQL)

      使 Microsoft SQL Server 不执行 Transact-SQL 语句。SQL Server 返回有关语句执行情况的详细信息,并估计语句对资源的需求。

      SET SHOWPLAN_ALL { ON | OFF }

      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 查询处理器在执行每个语句时采取的步骤。在输出中,每个语句都有一行说明语句的文本,后面紧接着几行介绍执行步骤的详细信息。下表显示了输出中包含的列。

列名 说明

StmtText

对于非 PLAN_ROW 类型的行,此列包含 Transact-SQL 语句的文本。对于 PLAN_ROW 类型的行,此列包含对操作的说明。此列包含物理运算符,也可以选择包含逻辑运算符。此列还可以跟一则由物理运算符决定的说明。有关详细信息,请参阅逻辑运算符和物理运算符引用

StmtId

当前批处理中的语句数。

NodeId

当前查询中的节点的 ID。

Parent

父步骤的节点 ID。

PhysicalOp

节点的物理实现算法。仅限于 PLAN_ROWS 类型的行。

LogicalOp

此节点表示的关系代数运算符。仅限于 PLAN_ROWS 类型的行。

Argument

提供有关当前执行的操作的补充信息。此列的内容取决于物理运算符。

DefinedValues

包含一组以逗号分隔的此运算符所引入的值。这些值可以是出现在当前查询(例如,在 SELECT 列表或 WHERE 子句中)内的计算表达式,也可以是查询处理器为处理该查询引入的内部值。以后在该查询内的任何其他地方都可以引用这些定义的值。仅限于 PLAN_ROWS 类型的行。

EstimateRows

由此运算符生成的预计输出行数。仅限于 PLAN_ROWS 类型的行。

EstimateIO

此运算符的预计 I/O 开销。仅限于 PLAN_ROWS 类型的行。

EstimateCPU

此运算符的预计 CPU 开销。仅限于 PLAN_ROWS 类型的行。

AvgRowSize

通过此运算符传递的行的预计平均行大小(以字节为单位)。

TotalSubtreeCost

此操作和所有子操作的预计(累积)开销。

OutputList

包含当前操作正在提取的列的列表,此列表以逗号分隔。

Warnings

包含一组以逗号分隔的与当前操作相关的警告信息。警告消息可能包含字符串 "NO STATS:()" 和一组列表。此警告信息表示查询优化器曾尝试根据此列的统计信息做出决策,但没有找到可用的统计信息。因此,查询优化器不得不进行推测,这可能已导致选择了低效的查询计划。有关创建或更新列统计信息(这些统计信息有助于查询优化器选择更有效的查询计划)的详细信息,请参阅更新统计信息。此列可能选择包含字符串 MISSING JOIN PREDICATE,表示正在进行的联接(与表有关)未使用联接谓词。意外丢失联接谓词可能导致查询的运行时间比预期长得多,并返回一个巨大的结果集。如果出现此警告,请验证是否有意不使用联接谓词。

Type

节点类型。对于每个查询的父节点,这是 Transact-SQL 语句类型(如 SELECT、INSERT、EXECUTE 等)。对于表示执行计划的子节点,这是 PLAN_ROW 类型。

Parallel

0 = 运算符没有以并行方式运行。

1 = 运算符正在以并行方式运行。

EstimateExecutions

当前查询运行期间,预计将执行此运算符的次数。

      以下两个语句使用了 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 子句条件。

第一个索引查询的 EstimateRowsTotalSubtreeCost 属性中的值较小,这表示与非索引查询相比,该查询的处理速度快得多且使用的资源更少。

<span><em><span>USE AdventureWorks;
GO
SET SHOWPLAN_ALL ON;
GO
-- First query.
SELECT EmployeeID 
FROM HumanResources.Employee
WHERE NationalIDNumber = '509647174';
GO
-- Second query.
SELECT EmployeeID, EmergencyContactID 
FROM HumanResources.Employee
WHERE EmergencyContactID LIKE '1%';
GO
SET SHOWPLAN_ALL OFF;
GO</span></em></span>

 

 

SET STATISTICS IO (Transact-SQL)

      使 SQL Server 显示有关由 Transact-SQL 语句生成的磁盘活动量的信息。

      SET STATISTICS IO { ON | OFF }

      如果 STATISTICS IO 为 ON,则显示统计信息。如果为 OFF,则不显示统计信息。

如果将此选项设置为 ON,则所有后续的 Transact-SQL 语句将返回统计信息,直到将该选项设置为 OFF 为止。

下表列出并说明了各个输出项。

输出项 含义

Table

表的名称。

scan count

执行的扫描次数。

logical reads

从数据缓存读取的页数。

physical reads

从磁盘读取的页数。

read-ahead reads

为进行查询而放入缓存的页数。

lob logical reads

从数据缓存读取的 textntextimage 或大值类型 (varchar(max)nvarchar(max)varbinary(max)) 页的数目。

lob physical reads

从磁盘读取的 textntextimage 或大值类型页的数目。

lob read-ahead reads

为进行查询而放入缓存的 textntextimage 或大值类型页的数目。

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

 

ms184361.note(zh-cn,SQL.90).gif注意:

当 Transact-SQL 语句检索 LOB 列时,有些 LOB 检索操作可能需要多次遍历 LOB 树。这可能会导致 SET STATISTICS IO 报告的次数比预期的逻辑读取次数更高。

      以下示例显示 SQL Server 处理语句时,进行了多少次逻辑读和物理读操作。

<em>USE AdventureWorks;
GO       
SET STATISTICS IO ON;
GO
SELECT * 
FROM Production.ProductCostHistory
WHERE StandardCost </em>

下面是结果集:

<em>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.</em>

 

 

SET STATISTICS PROFILE (Transact-SQL)

      显示语句的配置文件信息。STATISTICS PROFILE 对即席查询、视图和存储过程有效。

      SET STATISTICS PROFILE { ON | OFF }

      STATISTICS PROFILE 为 ON 时,执行的各个查询都返回其常规结果集,后面跟一个附加结果集,显示查询执行的配置文件。

      附加结果集包含查询的 SHOWPLAN_ALL 列以及下面的附加列。

列名 说明

Rows

各运算符生成的实际行数

Executes

运算符执行的次数

 

 

SET STATISTICS TIME (Transact-SQL)

      显示分析、编译和执行语句所需的毫秒数。

      SET STATISTICS TIME { ON | OFF }

      当 SET STATISTICS TIME 为 ON 时,会显示语句时间统计信息。为 OFF 时,不显示时间统计信息。

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

Microsoft SQL Server 不能在纤程模式下提供准确的统计信息,而纤程模式在启用“轻型池” 配置选项时激活。

只有当使用 SET STATISTICS TIME ON 执行查询时才更新 sysprocesses 表中的 cpu 列。当 SET STATISTICS TIME 为 OFF 时,将返回 0

ON 和 OFF 设置还影响 SQL Server Management Studio 内的“当前活动的进程信息视图”中的 CPU 列。

      下面的示例显示服务器的执行、分析和编译时间

<em>USE AdventureWorks;
GO       
SET STATISTICS TIME ON
GO
SELECT * 
FROM Production.ProductCostHistory
WHERE StandardCost </em>

下面是结果集:

<em>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.</em>
Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn