首页 > 数据库技术 > 详细

【MS SQL】通过执行计划来分析SQL性能

时间:2014-06-10 14:19:16      阅读:448      评论:0      收藏:0      [点我收藏+]

如何知道一句SQL语句的执行效率呢,只知道下面3种:

1、通过SQL语句执行时磁盘的活动量(IO)信息来分析:SET STATISTICS IO ON (开启) / SET STATISTICS IO OFF (关闭)

2、通过SQL语句执行时语法分析、编译以及执行所消耗的时间:SET STATISTICS TIME ON (开启) / SET STATISTICS TIME OFF (关闭)

3、通过执行计划查看:Ctrl + L

 ----------------------------------------------------------------------------------------------------------------------------------------------------

首先有个表,表的数据不多,所以执行结果比较起来可能不会太明显...

bubuko.com,布布扣

 

1、先执行 SET STATISTICS IO ON & SET STATISTICS TIME ON;

bubuko.com,布布扣

 

2、执行查询语句,选择"消息"选项页;为方便查看,使用了聚合函数、GROUP BY、ORDER BY

【我们并未查询表:Worktable,为何会有Worktable的记录呢,最最最后面有注明。】

bubuko.com,布布扣

3、按Ctrl + L 组合键,查看执行计划:

bubuko.com,布布扣

==================================================================================

如何查看表的设计或SQL语句是否是优化的,这边以建立索引后执行相同的SQL语句,来比对执行结果。

==================================================================================

1、建立索引。(为测试性能而建立,未必适用于真实场景)

bubuko.com,布布扣

2、建立索引后执行语句所消耗的时间:

【这边没有出现Worktable的记录,最最最后面有注明。】

bubuko.com,布布扣

3、按Ctrl + L 组合键,查看执行计划:

bubuko.com,布布扣

 

====是不是感觉不到什么变化?下图是未建立索引和建立索引相同SQL语句执行效能的对比=====

bubuko.com,布布扣

 

由于测试数据较少,结果并不明显。

但可以通过掌握 "IO读取"、"时间开销"、"执行计划"的参数变化,对SQL性能进行调优。 

 

==============================================================

【Worktable】在MSDN说明:  

关系引擎可能需要生成一个工作表以执行 SQL 语句中指定的逻辑操作。工作表是用于保存中间结果的内部表。

 某些 GROUP BYORDER BY  UNION查询中会生成工作表。

 例如,如果 ORDER BY 子句引用了不为任何索引涵盖的列,则关系引擎可能需要生成一个工作表以按所请求的顺序对结果集进行排序。

 工作表有时也用作临时保存执行部分查询计划所得结果的假脱机。工作表在tempdb中生成,并在不再需要时自动删除。

【MS SQL】通过执行计划来分析SQL性能,布布扣,bubuko.com

【MS SQL】通过执行计划来分析SQL性能

原文:http://www.cnblogs.com/suta2008/p/3778230.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!