博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
查询优化器内核剖析第五篇:进一步的了解执行计划
阅读量:7105 次
发布时间:2019-06-28

本文共 1496 字,大约阅读时间需要 4 分钟。

查询优化器内核剖析第五篇:进一步的了解执行计划
  
系列文章索引:
       
      
 
 
 
 
 
    在上一篇中,我们稍微的谈了一些有关执行计划的知识,本篇的目的主要是补充上一篇,因为执行计划的东西很多很多,如果要讲清楚,那就得用一本书的篇幅来讲述,看以后的安排,如果有时间,可以进一步的尝试写写。
 
    在上一篇中,我们说了,可以再图形化执行计划中查看数据的流向等相关信息,同时,也可以通过把鼠标放在一些操作或者箭头上查看更多的信息。另外,我们还可以在物理操作符和箭头上,点击右键,选择“属性”,查看更多的信息,如下图所示:
 
    其实在很多的时候,图形化展示的信息是很有限的,毕竟有很多的信息不方便在图形中显示出来,所以为了查看更加具体的信息,我们可以查看执行计划的XML格式和普通文本格式(普通文本的格式以后会被微软逐近的弃用,但是如果是对SQL Server2000进行调优,那么还是只能用普通文本格式的执行计划来进行的)。
 
     如果在之前我们得到的图形化的执行计划的显示窗口,点击右键,然后选择“Show Execution Plan XML”,如下图所示:
    这个时候,就显示如下:
    我们这里不会讲述如何来解读这个XML格式的执行计划,以后可能会用一些专题来讲述,并且在本系列的后文文章中,如果用到了,会做适当的必要性的讲解。
 
    除此之外,我们还可以通过SQL语句来获取执行计划(只能用SQL语句来获取XML格式和普通文本格式的执行计划)。
    我们先用一个表格来总结一下查看执行计划的几种方式,如下:
    注意:很多的语句都是Set  Show_XXX On,有“On”就有对应的“Off“。
    下面,我们就来查看之前的SQL语句的XML格式的执行计划:
   
   
    运行之后,得到如下的结果显示:
   
    点击蓝色的链接,在SQL Server 2008中就看可以到这个XML格式的执行计划以图形化的形式展示出来。
 
    如果是在2005中,那么就会直接显示XML格式。这个时候,我们可以把这些XML格式的执行计划保存为.sqlplan为后缀的文件,那么双击就可以以图形化的形式查看了。
   
 
    如果运行下面的SQL语句:
20120323210102.png
    那么就会显示基于普通文本的格式的执行计划,如下所示:
   
    普通文本格式的不好之处就是不要阅读,但是它包含的信息是最多的。
 
    除了采用上面的的方法来查看之外,还可以利用DMV(动态管理视图)来查看和SQL Profiler或者SQL Trace来查看,我个人比较喜欢这个格式,但是DMV的学习曲线更加的陡峭,但是一旦学会,可以做很多的事情,特别是在性能优化与故障排除方面。、
 
    在这里,我介绍一下使用DMV来看。之前我们谈到的,当一个查询被优化之后,它的执行计划就会被放在了计划缓存中,也就是在内存中,所以我们可以采用sys.dm_exec_query_plan这个动态管理函数(DMF)来获取这个查询的执行计划(DMF常常和DMV结合在一起使用,以后谈到DMV,我们就指代:DMV和DMF)。
 
 
    我们运行下面的查询:
 
   
    在上面的查询中,涉及到了sys.dm_exec_requests这个动态管理视图,这个DMV就是放映了当前正在执行查询,而session_id就是当前运行的这个查询的回话id,我们可以通过查看一些系统表得到。这里就稍微的提及一下,我们会面还有更多的讲述!
 
    今天就到这里!下一篇讲述Join的一些知识,大家可以认为Join没有什么,但是“次Join非彼Join“,大家拭目以待 :)。
本文转自yanyangtian51CTO博客,原文链接:http://blog.51cto.com/yanyangtian/818813
 ,如需转载请自行联系原作者
你可能感兴趣的文章
我的友情链接
查看>>
only a DBA can import a file exported by another DBA 错误解决方法
查看>>
EIGRP实验-路由更新
查看>>
SQL Server 2008 Express 安装或卸载时提示“重启计算机失败"的解决办法
查看>>
IT职场人生系列之八:行业与公司类型
查看>>
如何在 Linux 中安装、配置和使用 Fish Shell?
查看>>
桥接和路由模式区别
查看>>
我的友情链接
查看>>
9位优美乘积式
查看>>
关于帮客户节约成本的一些想法
查看>>
java多线程学习(一)
查看>>
jquery的indexeddb简单使用
查看>>
Centos7+Open***使用用户及密码验证登陆
查看>>
Mac 下Nginx80端口无法子启动问题
查看>>
Hive入门到剖析(一)
查看>>
sed命令
查看>>
Abstract Class yii\base\ErrorHandler
查看>>
jmeter
查看>>
兼容软件CrossOver中如何解决容器中缺少控制面板
查看>>
取消与关闭(第七章)
查看>>