以下语句可以进行SQL 语句执行时间分析,两个Go之间就是SQL查询语句

  1. use Work--数据库名
  2. go
  3. set statistics profile on
  4. set statistics io on
  5. set statistics time on
  6. go
  7. -----(SQL执行语句)
  8. go
  9. set statistics profile off
  10. set statistics io off
  11. set statistics time off
  12. go

运行一次后就可以在查询结果的信息标签下看到统计信息

SQL Server 的查询过程为根据SQL表中的统计信息分析执行计划,然后才是编译,最后执行。

其中一共用到了三条Statistics相关语句

一、statistics time选项

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

1、CPU时间和占用时间:

(1)CPU时间是指该句CPU占用的时间,即语句占用了多少CPU资源。在多个CPU的系统中,这个CPU时间是所有CPU上时间的总和。与profiler工具和服务器跟踪选项所提供的CPU值一致

(2)占用时间是指该语句总共用的时间,包括可能存在的I/O等待时间等。这个与Profiler中的Duration值一致

通常数据需要从磁盘中读取,还可能遇到I/O阻塞,因此大部分情况下看到的是占用时间大于CPU时间,这个很容易理解,但有时候CPU时间是可能大于占用时间的,这是由于该句使用了多个CPU,但是等待时间又很短

           

那么个SQL语句的CPU时间就是分析编译里的CPU时间加上执行时间里的CPU时间之和,整个语句的执行时间就是所有占用时间之和。通常编译主要就是CPU的运算,那么CPU时间和占用时间应该是比较接近的。如果在执行过程,就可能需要将数据从磁盘读入内存,那么I/O等待时间的消耗就可能造成占用时间很长。

2、在存在缓存的情况下,执行计划可以重用,因此分析编译时间可能都为零;执行过程中的数据也不需要从磁盘上读取,所以执行时间中的中占用时间很短,缓存使得性能大提高。

二、Statistics IO选项

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

1、“表 'ProductLite'。扫描计数 1,逻辑读取 3077 次,物理读取 0 次,预读 0 次,lob 逻辑读取 0 次,lob 物理读取 0 次,lob 预读 0 次。”这条结果中出现的概念在SQL Server帮助文档中都有解释

2、逻辑读取与Profiler中的Reads值是一个概念,但是由于profile日跟踪显示的Reads随着该查询使用的SET语句而增长,但是Statistics IO显示的逻辑读数量不包含SET语句所访问的附加页面,因此,Statistics IO提供的读操作数量一致。

3、当内存中还没有需要查找的数据时,需要从磁盘读取,因此物理读取和预读都不会为零;一旦经过一次查询后,该数值放入缓存,那么这两个值将保持为零。

三、Statistics profiler

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

参数说明

Rows:执行计划的每一步返回的实际行数

Executes:执行计划的每一步被运行了多少次

StmtText:执行计划的具体内容。执行计划以一棵树的形式显示。每一行都是运行的一步,都会有结果集返回,也都会有自己的cost

EstimateRows:SQLSERVER根据表格上的统计信息,预估的每一步的返回行数。

EstimateIO:SQLSERVER根据EstimateRows和统计信息里记录的字段长度,预估的每一步会产生的I/O cost

EstimateCPU:SQLSERVR根据EstimateRows和统计信息里记录的字段长度,以及要做的事情的复杂度,预估每一步会产生的CPU cost

TotalSubtreeCost:SQLSERVER根据EstimateIO和EstimateCPU通过某种计算公式,计算出每一步执行计划子树的cost

Warnings:警告信息

Parallel:是否使用了并行的执行计划

SQL执行效率2-执行计划的更多相关文章

  1. Java开发学习(十七)----AOP案例之测量业务层接口执行效率

    一.需求分析 这个需求比较简单 需求:任意业务层接口执行均可显示其执行效率(执行时长) 这个的目的是查看每个业务层执行的时间,这样就可以监控出哪个业务比较耗时,将其查找出来方便优化. 具体实现的思路: ...

  2. 【ORACLE】记录通过执行Oracle的执行计划查询SQL脚本中的效率问题

    记录通过执行Oracle的执行计划查询SQL脚本中的效率问题   问题现象: STARiBOSS5.8.1R2版本中,河北对帐JOB执行时,无法生成发票对帐文件.   首先,Quartz表达式培植的启 ...

  3. SQL Server SQL性能优化之--通过拆分SQL提高执行效率,以及性能高低背后的原因

    复杂SQL拆分优化 拆分SQL是性能优化一种非常有效的方法之一, 具体就是将复杂的SQL按照一定的逻辑逐步分解成简单的SQL,借助临时表,最后执行一个等价的逻辑,已达到高效执行的目的 一直想写一遍通过 ...

  4. SQL执行效率和性能测试方法总结

    对于做管理系统和分析系统的程序员,复杂SQL语句是不可避免的,面对海量数据,有时候经过优化的某一条语句,可以提高执行效率和整体运行性能.如何选择SQL语句,本文提供了两种方法,分别对多条SQL进行量化 ...

  5. 谈一谈SQL Server中的执行计划缓存(上)

    简介 我们平时所写的SQL语句本质只是获取数据的逻辑,而不是获取数据的物理路径.当我们写的SQL语句传到SQL Server的时候,查询分析器会将语句依次进行解析(Parse).绑定(Bind).查询 ...

  6. SQL语句执行效率及分析(note)

    1.关于SQL查询效率,100w数据,查询只要1秒,与您分享: 机器情况p4: 2.4内存: 1 Gos: windows 2003数据库: ms sql server 2000目的: 查询性能测试, ...

  7. [转]SQLServer SQL执行效率和性能测试方法总结

    本文转自:http://www.zhixing123.cn/net/27495.html 对于做管理系统和分析系统的程序员,复杂SQL语句是不可避免的,面对海量数据,有时候经过优化的某一条语句,可以提 ...

  8. SQL执行效率和性能测试方法

    对于做管理系统和分析系统的程序员,复杂SQL语句是不可避免的,面对海量数据,有时候经过优化的某一条语句,可以提高执行效率和整体运行性能.如何选择SQL语句,本文提供了两种方法,分别对多条SQL进行量化 ...

  9. in和exists的区别与SQL执行效率

    in和exists的区别与SQL执行效率最近很多论坛又开始讨论in和exists的区别与SQL执行效率的问题,本文特整理一些in和exists的区别与SQL执行效率分析 SQL中in可以分为三类: 1 ...

随机推荐

  1. 【webGL】插件的使用的,实现一个鼠标动画的盒子

    准备工作: 1.stat.js stat.js是Three.js的作者Mr. Doob的另一个有用的JavaScript库.很多情况下,我们希望知道实时的FPS信息,从而更好地监测动画效果.这时候,s ...

  2. ASP.NET获取百度地图提供的API接口里面的JSON

    思路:开始是想直接在前台获取,但是跨域访问还是有点难度,而且格式必须是josnp格式的,最后嫌麻烦,不得已放弃. 我做的ASP.NET  而这个有自带的解析类,直接引用就行了 先在后台获取到JOSN: ...

  3. JavaScript中的面向对象

    //简单的面向对象 function 构造函数(){ this.属性; } //写在构造函数里面的属性一般为公共属性,或者通过传值进行改变. 构造函数.原型.方法 = function(){}; // ...

  4. 北漂的生活 - python 面试

    第一次来北京,先谈谈感受吧.都说北京的雾霾非常严重,可能是我来的时间短,暂时我还没有遇到特别恶劣的天气,感觉还是很美好的.和朋友住在顺义,出去一次真的远啊,旁边暂时还没有找到清真的饭馆(本人少数民族) ...

  5. 【转】代码中特殊的注释技术——TODO、FIXME和XXX的用处

    (转自:http://blog.csdn.net/reille/article/details/7161942) 作者:reille 本博客网址:http://blog.csdn.net/reille ...

  6. Duilib源码分析(四)绘制管理器—CPaintManagerUI—(前期准备三)

    接下来,我们将继续分析UIlib.h文件中其他的文件, UIContainer.h, UIRender.h, WinImplBase.h, UIManager.h,以及其他布局.控件等: 1. UIR ...

  7. 基于netty-socketio的web推送服务

    实时消息的推送,PC端的推送技术可以使用socket建立一个长连接来实现.传统的web服务都是客户端发出请求,服务端给出响应.但是现在直观的要求是允许特定时间内在没有客户端发起请求的情况下服务端主动推 ...

  8. python访问MS SqlServer(通过pyodbc)

    #!/usr/bin/env python # -*- coding: utf-8 -*- import pyodbc class MSSQL: """ 封装pyodbc ...

  9. 【leetcode】Length of Last Word

    题目简述 Given a string s consists of upper/lower-case alphabets and empty space characters ' ', return ...

  10. hash表及Java中的HashMap与HashSet

    链接: http://alex09.iteye.com/blog/539545/ 当程序试图将一个 key-value 对放入 HashMap 中时,程序首先根据该 key 的 hashCode() ...