了解Sql Server的执行计划
前一篇总结了Sql Server Profiler,它主要用来监控数据库,并跟踪生成的sql语句。但是只拿到生成的sql语句没有什么用,我们可以利用这些sql语句,然后结合执行计划来分析sql语句的性能问题,这才是我们的最终目的,那么如何使用执行计划呢?我准备从以下几点来总结。
- 如何启动执行计划
- 执行计划结果要看什么
- Sql Server的五种查找方式
- 查看更具体的执行过程
如何启动执行计划
运行一条sql,并且在工具栏中选中'Include Actual Execution Plan'按钮,此时就启动了执行计划,如下图。

Sql语句:
USE TSQLFundamentals2008;
GO -- 查询2006年7月1日到2007年7月31日的所有订单,并按requireddate字段排序
SELECT orderid,orderdate,requireddate,shippeddate,shipname,shipaddress FROM Sales.Orders
WHERE orderdate>='' AND orderdate<''
ORDER BY requireddate;
执行查询,可以在结果栏中看到执行计划结果,如下图。

执行计划结果要看什么
执行计划结果出来了,那我们要怎么看呢?一般我们只需关注以下几个参数。
- 哪一步开销较高。开销较高的地方说明这个地方查询比较耗时。
- 哪些步骤所影响的数据行较多。这个可以通过连接线条的粗细来判断。
- 每一步做了些什么事情。
Sql Server的五种查询方式
要了解Sql Server的五种查询方式之前,我们要弄明白两个概念,Sql Server中的两种索引,聚集索引和非聚集索引。【聚集索引】直接决定了记录的存放位置,或者说,根据聚集索引可以直接获取到该记录,一般我们表的主键都是用聚集索引。【非聚集索引】则保存了二个信息,1.相应索引字段的值。2.记录对应聚集索引的位置(如果表没有聚集索引则保存记录指针)。因此,如果能通过聚集索引来查找记录,则速度是最快的。
下面是Sql Server查询数据的五种方式,这对我们理解执行计划非常重要。五种方式如下。
- 【Table Scan】:遍历整个表来查找匹配的数据行,速度最慢。
- 【Index Scan】:依据索引先从表中过滤出一部分记录,然后再查找所有匹配的数据行。查询速度比Table Scan稍快。
- 【Index Seek】:依据索引,定位记录的存放位置,然后再取得记录,因此,其查询速度比前面两种都快。
- 【Clustered Index Scan】:按聚集索引(一般是主键)遍历整个表,因为它的记录就是按聚集索引来顺序存放的。注意它与Table Scan的区别,其实它们都是进行全表扫描,只不过Table Scan是不带索引的扫描,而Clustered Index Scan是按聚集索引扫描的。
- 【Clustered Index Seek】:聚集索引获取记录,它是直接拿到那条记录,而没有进行全表扫描,因此它的查询速度是最快的。
当我们查看执行计划结果的时候,如果看到【Table Scan】,说明这个表没有建立任何索引,包括聚集索引。但往往看到更多的是【Clustered Index Scan】,表示该查询还是扫描了速个表,只不过是按聚集索引,实际效果还是和【Table Scan】没什么区别,因此,这时候我们可能要考虑建立'组合字段索引'。
查看更具体的执行过程
能过执行计划的结果图我们只能看出哪一块比较耗时,但是看不到Sql Server具体是怎么执行的。为了看得更明白,我们可以通过一条sql命令来查看,如下代码。
SET STATISTICS PROFILE ON;
执行结果除了返回数据集和执行计划外,还返回了一个表显示具体的执行过程,如下图。

这个结果我们重点要关注以下几点:
- Stmt Text:所执行的步骤详细描述,一般从最内层往外看。
- Rows:表示该执行步骤所产生的记录数。
- Executes:表示某执行步骤被执行的记录数。
参考资料
1,Fish Li的 看懂SqlServer查询计划
2,田园里的蟋蟀的 程序员眼中的 SQL Server-执行计划教会我如何创建索引?
了解Sql Server的执行计划的更多相关文章
- SQL Server 优化-执行计划
对于SQL Server的优化来说,优化查询可能是很常见的事情.由于数据库的优化,本身也是一个涉及面比较的广的话题, 因此本文只谈优化查询时如何看懂SQL Server查询计划.毕竟我对SQL Ser ...
- SQL Server实际执行计划COST"欺骗"案例
有个系统,昨天Support人员发布了相关升级脚本后,今天发现系统中有个功能不能正常使用了,直接报超时了(Timeout expired)的错误.定位到相关相关存储过程后,然后在优化分析的过程中,又遇 ...
- 程序员眼中的 SQL Server-执行计划教会我如何创建索引?
先说点废话 以前有 DBA 在身边的时候,从来不曾考虑过数据库性能的问题,但是,当一个应用程序从头到脚都由自己完成,而且数据库面对的是接近百万的数据,看着一个页面加载速度像乌龟一样,自己心里真是有种挫 ...
- SQL SERVER 2012 执行计划走嵌套循环导致性能问题的案例
开发人员遇到一个及其诡异的的SQL性能问题,这段完整SQL语句如下所示: declare @UserId INT declare @PSANo VAR ...
- SQL Server-执行计划教会我如何创建索引
先说点废话 以前有 DBA 在身边的时候,从来不曾考虑过数据库性能的问题,但是,当一个应用程序从头到脚都由自己完成,而且数据库面对的是接近百万的数据,看着一个页面加载速度像乌龟一样,自己心里真是有种挫 ...
- Sql Server中执行计划的缓存机制
Sql查询过程 当执行一个Sql语句或者存储过程时, Sql Server的大致过程是 1. 对查询语句进行分析,将其生成逻辑单元,并进行基本的语法检查 2. 生成查询树(会将查询语句中所有操作转换为 ...
- sql server 根据执行计划查询耗时操作
with QS as( select cp.objtype as object_type, /*类型*/ db_name(st.dbid) as [database], /*数据库*/ object_ ...
- sql server 2008 执行计划
SSMS允许我们查看一个图形化的执行计划(快捷键Ctrl+L)
- SQL Server控制执行计划
为了提高性能,可以使用提示(hints)特性,包含以下三类: 查询提示:(query hints)告知优化器在整个查询过程中都应用某个提示 关联提示:(join hints)告知优化器在查询的特定部分 ...
随机推荐
- install MCR in silent mode linux server
./install -mode silent -agreeToLicense yes -destinationFolder /home/yanzhh/wq/Programs/MCR export LD ...
- MVC 的各个部分都有那些技术来实现?如何实现?
MVC 的各个部分都有那些技术来实现?如何实现? MVC 是 Model-View-Controller 的简写 "Model" 代表的是应用的业务逻辑(通过JavaBean,EJ ...
- 使用ajax上传中遇到的问题
使用ajaxSubmit提交文件时,正确使用返回的json数据需要用eval在转化一下. 前台文件: $("#form1").ajaxSubmit({ url: 'QueryHan ...
- Prism 5 + MEF中的ModuleCatalog.CreateFromXaml问题
protected override IModuleCatalog CreateModuleCatalog() { return Microsoft.Practices.Prism.Modularit ...
- C#知识点有必要知会
如果说你父类里面有一个成员比如int a;那么你子类里面也可以再定义一个int a,这个时候base.a和this.a表示的就不是一个变量了,如果说子类里面没有,那么base.a和this.a表示的都 ...
- shell 显示字体颜色
(2).颜色语法: \033[前景色;背景色m \033[0m #0m代表恢复到系统默认的颜色 (3).字符界面前景颜色与背景颜色: 前 ...
- JS事件整理
onclick 鼠标点击事件 ondblclick 鼠标双击事件 onmouseover 鼠标移入事件 onmouseout 鼠标移出事件 onmousedown 鼠标按下事件 onmousemove ...
- AC自动机——Uva 11468 子串
题目链接:http://vjudge.net/contest/142513#problem/A 题意:给出一些字符和各自对应的选择概率,随机选择L次后将得到一个长度为L的随机字符串S.给出K个模版串, ...
- [问题2015S10] 复旦高等代数 II(14级)每周一题(第十一教学周)
[问题2015S10] 设 \(A\) 为 \(n\) 阶实方阵, 证明: 存在 \(n\) 阶非异实对称阵 \(R\), 使得 \(A'=R^{-1}AR\), 即 \(A\) 可通过非异实对称阵 ...
- ConsensusClusterPlus根据基因表达量对样品进行分类
#http://www.ncbi.nlm.nih.gov/pmc/articles/PMC2881355/ 一致聚类方法,采用重抽样方法来验证聚类合理性. library(ALL)data(ALL)d ...