set statistics profile on的用法
set statistics profile on的用法
set statistics profile on的用法一、SET STATISTICS PROFILE ON的用处
返回语句的执行计划,以及语句运行在每一步的实际返回行数统计。通过这个结果,不仅可以得到执行计划,理解语句执行过程,分析语句调优方向,也可以判断SQLSERVER是否选择了一个正确的执行计划。通过这样的方法,用户可以了解到语句的执行计划、SQLSERVER预估的准确性、cost的分布
二、统计返回的字段说明
Rows
执行计划的每一步返回的实际行数
Executes
执行计划的每一步被运行了多少次
StmtText
执行计划的具体内容。执行计划以一棵树的形式显示。每一行都是运行的一步,都会有结果集返回,也都会有自己的cost
EstimateRows
SQLSERVER根据表格上的统计信息,预估的每一步的返回行数。在分析执行计划时,我们会经常将Rows和EstimateRows这两列做对比,先确认SQLSERVER预估得是否正确,以判断统计信息是否有更新
EstimateIO
SQLSERVER根据EstimateRows和统计信息里记录的字段长度,预估的每一步会产生的I/O cost
EstimateCPU
SQLSERVR根据EstimateRows和统计信息里记录的字段长度,以及要做的事情的复杂度,预估每一步会产生的CPU cost
TotalSubtreeCost
SQLSERVER根据EstimateIO和EstimateCPU通过某种计算公式,计算出每一步执行计划子树的cost(包括这一步自己的cost和他的所有下层步骤的cost总和)
Warnings
SQLSERVER在运行每一步时遇到的警告,例如,某一步没有统计信息支持cost预估等。
Parallel
执行计划的这一步是不是使用了并行的执行计划
三、set statistics profile on实例
1、SQL语句实例
SET STATISTICS PROFILE ON
GO
SELECT COUNT(b.[SalesOrderID])
FROM [dbo].[SalesOrderHeader_test] a
INNER JOIN [dbo].[SalesOrderDetail_test] b
ON a.[SalesOrderID]=b.[SalesOrderID]
WHERE a.[SalesOrderID]>43659 AND a.[SalesOrderID]<53660
GO
2、返回的结果集中重要字段
3、备注
注意:这里是从最下面开始向上看的,也就是说从最下面开始一直执行直到得到结果集所以(行1)里的rows字段显示的值就是这个查询返回的结果集。
而且有多少行表明SQLSERVER执行了多少个步骤,这里有6行,表明SQLSRVER执行了6个步骤!!
4、分析
上面的执行计划可以分为以下几步
1、(第5行):从[SalesOrderHeader_test]表里找出所有a.[SalesOrderID]>43659 AND a.[SalesOrderID]<53660的值
因为表在这个字段上有一个聚集索引,所以SQL可以直接使用这个索引的seek
SQL预测返回10000条记录,实际也就返回了10000条记录.。这个预测是准确的。这一步的cost是0.202(totalsubtreecost)
2、(第6行):从[SalesOrderDetail_test]表里找出所有 a.[SalesOrderID]>43659 AND a.[SalesOrderID]<53660的值
因为表在这个字段上有一个非聚集索引,所以SQL可以直接使用这个索引的seek
虽然查询语句只定义了[SalesOrderHeader_test]表上有a.[SalesOrderID]>43659 AND a.[SalesOrderID]<53660过滤条件,但是根据语义分析,SQL知道这个条件在[SalesOrderDetail_test]上也为真。所以SQL选择先把这个条件过滤然后再做join。这样能够大大降低join的cost
在这一步SQL预估返回50561条记录,实际返回50577条。cost是0.127,也不高
3、(第4行):将a1和a2两步得到的结果集做一个join。因为SQL通过预估知道这两个结果集比较大,所以他直接选择了Hash Match的join方法。
SQL预估这个join能返回50313行,实际返回50577行。因为SQL在两张表的[SalesOrderID]上都有统计信息,所以这里的预估非常准确
这一步的cost等于totalsubtreecost减去他的子步骤,0.715-0.202-0.127=0.386。由于预估值非常准确,可以相信这里的cost就是实际每一步的cost
4、(第3行):在join返回的结果集基础上算count(*)的值这一步比较简单,count(*)的结果总是1,所以预测值是正确的。
其实这一步的cost是根据上一步(b)join返回的结果集大小预估出来的。我们知道步骤b的预估返回值非常准确,所以这一步的预估cost也不会有什么大问题
这棵子树的cost是0.745,减去他的子节点cost,他自己的cost是0.745-0.715=0.03。是花费很小的一步
5、(第2行):将步骤c返回的值转换为int类型,作为结果返回
- SQL Server中查询CPU占用高的SQL语句
- sqlserver自增字段(SQL Server中identity自增的用法详解)
- SQL Server中@@ROWCOUNT的用法
- SQL语句查询SQL SERVER作业的调度信息
- sqlserver存储过程同步数据(SQL Server存储过程同时返回分页结果集和总数)
- sqlserver2014怎么重新激活(解决Windows 10家庭版安装SQL Server 2014出现.net 3.5失败问题)
- sql server 报错(sql server利用不同语种语言显示报错错误消息的方法示例)
- sql server证书配置(SQL Server Alwayson创建代理作业的注意事项详解)
- sqlserver并发性能(sql server中的任务调度与CPU深入讲解)
- 查看SQL SERVER指定数据库中所有的触发器
- sqlserver怎么调成混合登录(如何快速删掉SQL Server登录时登录名下拉列表框中的选项)
- sql server修改表的字段类型后,不能保存
- sqlserver数据库的对象有哪些(详解SQL Server数据库架构和对象、定义数据完整性)
- sql server 2019 资源不足不可信(SQL Server异常代码处理的深入讲解)
- sqlserver配置管理器不见了(SQL Server配置管理器无法连接到WMI提供程序)
- sql server查询操作怎么做(sqlserver分页查询处理方法小结)
- 当年的 白洋淀战神 练肌肉 嘎子哥也成为行走的荷尔蒙(当年的白洋淀战神)
- 肌肉小子陈康, 亚洲巨兽 黄哲勋,哪个才是你的菜(肌肉小子陈康亚洲巨兽)
- 新闻周刊 青岛网红 赵厂长 编段子一箩筐输出快乐,陪父亲十二载勇斗病魔(新闻周刊青岛网红)
- 44岁夏雨演谋女郎爸,大其24岁却看不出,互动不怕袁泉吃醋(44岁夏雨演谋女郎爸)
- 全椒人,你还记得吗 那年,那人,那网,那些我们的青春记忆(全椒人你还记得吗)
- 全椒人在苏州10周年联谊会在苏州举办(全椒人在苏州10周年联谊会在苏州举办)
热门推荐
- sqlserver数据库基本操作(SQL Server四个系统表的知识讲解)
- js如何将json字符串转换为json对象
- sql两列内容合并(分组字符合并SQL语句 按某字段合并字符串之一简单合并)
- python有什么好的微信公众号(python下载微信公众号相关文章)
- mysql数据库使用规则(mysql数据库基本语法及操作大全)
- dockerfile挂载目录(解决docker run中使用 ./ 相对路径挂载文件或目录失败的问题)
- mysql三种查询方式(MySQL查询学习之基础查询操作)
- 欧洲云服务器和VPS有哪些区别?(欧洲云服务器和VPS有哪些区别?)
- php开发中用什么模板(PHP模版引擎原理、定义与用法实例)
- docker目录映射不起作用(关于dockerfile build过程中报/bin/sh: pip: command not found的解决方法)
排行榜
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9