日期:2014-05-17  浏览次数:20915 次

如何查看sqlserver执行计划来判断SQL语句效率!
如题:当sql语句变化后,如何使用sqlserver 执行计划看SQL执行效率,应该看哪一个选项?
基本上每次执行后都有一个select 的选项,但看上面的io和cpu基本为0




上面四个为测试环境,正式环境更为复杂,如:


请问如何看这执行计划呢!


如果使用SET STATISTICS io ON指令测试
SET STATISTICS io ON 
SET STATISTICS io off

测试环境数据上百万,我测试后看逻辑次数和表描述次数,我感觉也不准,测试效果如下:
select * from a where createtime>'2012-11-29'
这个SQL的逻辑次数为46408
select * from a where datediff(day,createtime,getdate())=0
而这个sql的逻辑次数为500多

明天datediff的效率比 createtime >''差,为什么效率好的逻辑次数却高了近倍呢?两个SQL分别测试时是新打开的查询分析器,请问这是什么原因呢?

------解决方案--------------------
对于执行计划,特别是2008,先看看有没有丢失索引。然后看执行计划里面的图标,哪个的百分比是最大的。重点优化那个。还要看有没有表扫描、聚集索引扫描等。执行计划是一本书才勉强说得完的东西。
------解决方案--------------------
通过对执行计划的跟踪,确定逻辑读最多最乱的,从索引入手解决。
再次跟踪,发现其在执行过程中占用资源最大的百分比,然后分析表的连接。
关于SQL SERVER优化,是个长期学习的过程,基本的优化含有了索引等内容,但深入优化就需要掌握更多的存储引擎方面的知识了。建议学习官方书籍《SQL SERVER2008存储引擎》
------解决方案--------------------
#1.从上往下,从右往左看
#2.不用“感觉”,它是准的,很可能是楼主没明白整个执行计划的意思
#3.想看明白,首先要知道2点:1.JOIN的三种连接方式:Loop,Merge,Hash连接;2.什么是SEEK,什么是SCAN,以及索引是如何被利用的。
推荐书籍:SQL SERVER 2005技术内幕-存储引擎,相关章节
------解决方案--------------------
引用:
Quote: 引用:

对于执行计划,特别是2008,先看看有没有丢失索引。然后看执行计划里面的图标,哪个的百分比是最大的。重点优化那个。还要看有没有表扫描、聚集索引扫描等。执行计划是一本书才勉强说得完的东西。
那有没有相关的书籍
http://www.red-gate.com/community/books/sql-server-execution-plans