Sql Server的执行计划

  前一篇总结了Sql Server Profiler,它主要用来监控数据库,并跟踪生成的sql语句。但是只拿到生成的sql语句没有什么用,我们可以利用这些sql语句,然后结合执行计划来分析sql语句的性能问题,这才是我们的最终目的,那么如何使用执行计划呢?我准备从以下几点来总结。

  1. 如何启动执行计划
  2. 执行计划结果要看什么
  3. Sql Server的五种查找方式
  4. 查看更具体的执行过程

如何启动执行计划

  运行一条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>='20060701' AND orderdate<'20070801'
ORDER BY requireddate;
复制代码

  执行查询,可以在结果栏中看到执行计划结果,如下图。

  

执行计划结果要看什么

  执行计划结果出来了,那我们要怎么看呢?一般我们只需关注以下几个参数。

  1. 哪一步开销较高。开销较高的地方说明这个地方查询比较耗时。
  2. 哪些步骤所影响的数据行较多。这个可以通过连接线条的粗细来判断。
  3. 每一步做了些什么事情。

Sql Server的五种查询方式

   要了解Sql Server的五种查询方式之前,我们要弄明白两个概念,Sql Server中的两种索引,聚集索引和非聚集索引。【聚集索引】直接决定了记录的存放位置,或者说,根据聚集索引可以直接获取到该记录,一般我们表的主键都是用聚集索引。【非聚集索引】则保存了二个信息,1.相应索引字段的值。2.记录对应聚集索引的位置(如果表没有聚集索引则保存记录指针)。因此,如果能通过聚集索引来查找记录,则速度是最快的。

  下面是Sql Server查询数据的五种方式,这对我们理解执行计划非常重要。五种方式如下。

  1. 【Table Scan】:遍历整个表来查找匹配的数据行,速度最慢。
  2. 【Index Scan】:依据索引先从表中过滤出一部分记录,然后再查找所有匹配的数据行。查询速度比Table Scan稍快。
  3. 【Index Seek】:依据索引,定位记录的存放位置,然后再取得记录,因此,其查询速度比前面两种都快。
  4. 【Clustered Index Scan】:按聚集索引(一般是主键)遍历整个表,因为它的记录就是按聚集索引来顺序存放的。注意它与Table Scan的区别,其实它们都是进行全表扫描,只不过Table Scan是不带索引的扫描,而Clustered Index Scan是按聚集索引扫描的。
  5. 【Clustered Index Seek】:聚集索引获取记录,它是直接拿到那条记录,而没有进行全表扫描,因此它的查询速度是最快的。

  当我们查看执行计划结果的时候,如果看到【Table Scan】,说明这个表没有建立任何索引,包括聚集索引。但往往看到更多的是【Clustered Index Scan】,表示该查询还是扫描了速个表,只不过是按聚集索引,实际效果还是和【Table Scan】没什么区别,因此,这时候我们可能要考虑建立'组合字段索引'。

查看更具体的执行过程

  能过执行计划的结果图我们只能看出哪一块比较耗时,但是看不到Sql Server具体是怎么执行的。为了看得更明白,我们可以通过一条sql命令来查看,如下代码。

SET STATISTICS PROFILE ON;

  执行结果除了返回数据集和执行计划外,还返回了一个表显示具体的执行过程,如下图。

  这个结果我们重点要关注以下几点:

  1. Stmt Text:所执行的步骤详细描述,一般从最内层往外看。
  2. Rows:表示该执行步骤所产生的记录数。
  3. Executes:表示某执行步骤被执行的记录数。

参考资料

1,Fish Li的 看懂SqlServer查询计划

2,田园里的蟋蟀的 程序员眼中的 SQL Server-执行计划教会我如何创建索引?

3,CareySon的 T-SQL查询进阶--理解SQL Server中索引的概念,原理以及其他

4,雲霏霏的SQL Server Profiler使用教程,通俗易懂才是王道

http://www.cnblogs.com/fish-li/archive/2011/06/06/2073626.html

索引统计信息
http://msdn.microsoft.com/zh-cn/library/ms190397(SQL.90).aspx

查询优化建议
http://msdn.microsoft.com/zh-cn/library/ms188722(SQL.90).aspx

用于对运行慢的查询进行分析的清单
http://msdn.microsoft.com/zh-cn/library/ms177500(SQL.90).aspx

逻辑运算符和物理运算符引用
http://msdn.microsoft.com/zh-cn/library/ms191158(SQL.90).aspx



  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值