SQL执行效率2-执行计划
以下语句可以进行SQL 语句执行时间分析,两个Go之间就是SQL查询语句
- use Work--数据库名
- go
- set statistics profile on
- set statistics io on
- set statistics time on
- go
- -----(SQL执行语句)
- go
- set statistics profile off
- set statistics io off
- set statistics time off
- 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-执行计划的更多相关文章
- Java开发学习(十七)----AOP案例之测量业务层接口执行效率
一.需求分析 这个需求比较简单 需求:任意业务层接口执行均可显示其执行效率(执行时长) 这个的目的是查看每个业务层执行的时间,这样就可以监控出哪个业务比较耗时,将其查找出来方便优化. 具体实现的思路: ...
- 【ORACLE】记录通过执行Oracle的执行计划查询SQL脚本中的效率问题
记录通过执行Oracle的执行计划查询SQL脚本中的效率问题 问题现象: STARiBOSS5.8.1R2版本中,河北对帐JOB执行时,无法生成发票对帐文件. 首先,Quartz表达式培植的启 ...
- SQL Server SQL性能优化之--通过拆分SQL提高执行效率,以及性能高低背后的原因
复杂SQL拆分优化 拆分SQL是性能优化一种非常有效的方法之一, 具体就是将复杂的SQL按照一定的逻辑逐步分解成简单的SQL,借助临时表,最后执行一个等价的逻辑,已达到高效执行的目的 一直想写一遍通过 ...
- SQL执行效率和性能测试方法总结
对于做管理系统和分析系统的程序员,复杂SQL语句是不可避免的,面对海量数据,有时候经过优化的某一条语句,可以提高执行效率和整体运行性能.如何选择SQL语句,本文提供了两种方法,分别对多条SQL进行量化 ...
- 谈一谈SQL Server中的执行计划缓存(上)
简介 我们平时所写的SQL语句本质只是获取数据的逻辑,而不是获取数据的物理路径.当我们写的SQL语句传到SQL Server的时候,查询分析器会将语句依次进行解析(Parse).绑定(Bind).查询 ...
- SQL语句执行效率及分析(note)
1.关于SQL查询效率,100w数据,查询只要1秒,与您分享: 机器情况p4: 2.4内存: 1 Gos: windows 2003数据库: ms sql server 2000目的: 查询性能测试, ...
- [转]SQLServer SQL执行效率和性能测试方法总结
本文转自:http://www.zhixing123.cn/net/27495.html 对于做管理系统和分析系统的程序员,复杂SQL语句是不可避免的,面对海量数据,有时候经过优化的某一条语句,可以提 ...
- SQL执行效率和性能测试方法
对于做管理系统和分析系统的程序员,复杂SQL语句是不可避免的,面对海量数据,有时候经过优化的某一条语句,可以提高执行效率和整体运行性能.如何选择SQL语句,本文提供了两种方法,分别对多条SQL进行量化 ...
- in和exists的区别与SQL执行效率
in和exists的区别与SQL执行效率最近很多论坛又开始讨论in和exists的区别与SQL执行效率的问题,本文特整理一些in和exists的区别与SQL执行效率分析 SQL中in可以分为三类: 1 ...
随机推荐
- Spring——集成JPA
配置文件如下:<applicationContext.xml> <?xml version="1.0" encoding="UTF-8"?&g ...
- sublime如何自动保存
sublime是前端开发者喜欢使用的工具,它有很多快捷方式可以让我们快速的编写代码:在开发过程中,每次修改代码之后都要按Ctrl+S保存.在这里向大家介绍一下如何设置让它自动保存. 一.打开subli ...
- not in 和 not EXISTS 的区别
1.in和exists in是把外表和内表作hash连接,而exists是对外表作loop循环,每次loop循环再对内表进行查询,一直以来认为exists比in效率高的说法是不准确的.如果查询的两个表 ...
- 杨氏矩阵:查找x是否在矩阵中,第K大数
参考:http://xudacheng06.blog.163.com/blog/static/4894143320127891610158/ 杨氏矩阵(Young Tableau)是一个很奇妙的数据结 ...
- JAVA中MAP值保持顺序不变
今天在进行JAVA开发过程中,因需要使用MAP来存放数据,同时希望MAP中KEY的顺序与放入顺序保持一致. 在使用HashMap之后,发现KEY的顺序是乱序的,每次打印还不太一样.上网查询资料之后发现 ...
- FFT与乒乓球
刚刚打乒乓球的时候,看到一个旋球.想起<傅里叶分析之掐死教程>: “正弦曲线波叠加出一个带90度角的矩形波来” 我们把多个旋叠加在一起,是不是就可以让这个球跳舞了呢?
- C#通过第三方组件生成二维码(QR Code)和条形码(Bar Code)
用C#如何生成二维码,我们可以通过现有的第三方dll直接来实现,下面列出几种不同的生成方法: 1):通过QrCodeNet(Gma.QrCodeNet.Encoding.dll)来实现 1.1):首先 ...
- TOMCAT-报错The BASEDIR environment variable is not defined correctly
<span style="font-size:18px;">The BASEDIR environment variable is not defined correc ...
- java对象转换成json
package com.bjs.acrosstime.utils; import java.util.ArrayList; import java.util.Date; import java.uti ...
- [spring源码学习]九、IOC源码-applicationEventMulticaster事件广播
一.代码实例 回到第IOC的第七章context部分,我们看源码分析部分,可以看到在spring的bean加载之后的第二个重要的bean为applicationEventMulticaster,从字面 ...